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([]); const [total, setTotal] = useState(0); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const refresh = useCallback(async () => { if (!enabled) return; setLoading(true); try { const qs = provider !== 'all' ? `?provider=${encodeURIComponent(provider)}` : ''; const res = await apiFetch( `/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 }; }