import { useCallback, useEffect, useState } from "react";
import { apiFetch } from "../lib/api";

export type MailBlockedItem = {
  id: string;
  subject: string;
  senderEmail: string;
  senderName: string | null;
  /** Wann die Mail beim Sender raus / im User-Postfach ankam (kann Wochen zurückliegen). */
  receivedAt: string;
  /** Wann der Daemon die Mail geblockt hat — das ist die richtige Zeit für "Kürzlich blockiert". */
  createdAt: string;
  connectionId: string;
  connection?: {
    id: string;
    email: string;
    title: string | null;
    provider: string;
    providerLabel: string;
  } | null;
};

export type MailResultsResponse = {
  results: MailBlockedItem[];
  total: number;
  page: number;
  pages: number;
};

/**
 * GET /api/mail/results — Liste der blockierten Mails mit optionalem Provider-Filter.
 * Backend räumt selbst nach 24h auf (deleteOldMailBlocked) — Retention sollte für
 * den 30-Tage-Bar-Chart auf 90 Tage hochgesetzt werden, sonst sind die Stats leer.
 */
export function useMailResults(enabled: boolean = true, provider: string = 'all') {
  const [results, setResults] = useState<MailBlockedItem[]>([]);
  const [total, setTotal] = useState(0);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState<string | null>(null);

  const refresh = useCallback(async () => {
    if (!enabled) return;
    setLoading(true);
    try {
      const qs = provider !== 'all' ? `?provider=${encodeURIComponent(provider)}` : '';
      const res = await apiFetch<MailResultsResponse>(
        `/api/mail/results${qs}`,
      );
      setResults(res.results ?? []);
      setTotal(res.total ?? 0);
      setError(null);
    } catch (e: any) {
      setError(e?.message ?? "unknown");
    } finally {
      setLoading(false);
    }
  }, [enabled, provider]);

  useEffect(() => {
    if (enabled) refresh();
  }, [enabled, refresh]);

  return { results, total, loading, error, refresh };
}
