// frontend/lib/hooks/useMail.ts — 메일 목록/계정/폴더 SWR 훅
"use client";
import useSWR from "swr";
import type { AccountFolder, EmailRow, MailAccount } from "@/lib/types";
import { mailApi } from "@/lib/mail/api";

export function useMail(account: string | null, folder: string, query = "") {
  // 보낸편지함/임시보관함은 전용 엔드포인트(발송/대기 메일)에서 가져온다.
  const fetcher =
    folder === "sent"
      ? () => mailApi.sent(account)
      : folder === "drafts"
        ? () => mailApi.drafts(account)
        : () => mailApi.list(account, folder, query);
  const {
    data: emails,
    error: emailsError,
    mutate,
    isLoading,
  } = useSWR<EmailRow[]>(["mail", account, folder, query], fetcher, {
    // 백엔드 자동 풀링이 새 메일을 적재하므로 주기적으로(10초)·포커스 시 목록을 갱신.
    revalidateOnFocus: true,
    refreshInterval: 10_000,
    // 처음 보는 폴더로 전환할 때 직전 목록을 유지 → emails 가 undefined 로 떨어지지
    // 않게 해 전체 화면 스켈레톤(사이드바 언마운트=트리 닫힘)을 막는다.
    keepPreviousData: true,
  });
  const { data: accounts } = useSWR<MailAccount[]>("mail/accounts", () => mailApi.accounts(), {
    revalidateOnFocus: false,
  });
  const { data: folders } = useSWR<AccountFolder[]>("mail/folders", () => mailApi.folders(), {
    revalidateOnFocus: false,
    refreshInterval: 30_000, // 폴더 카운트도 주기 갱신
  });
  return { emails, accounts, folders, error: emailsError, isLoading, mutate };
}
