import { useState, useCallback } from "react"; export function useEmailQueue() { const [queue, setQueue] = useState([]); const [currentIndex, setCurrentIndex] = useState(0); const [stats, setStats] = useState({ queued: 0, researching: 0, generated: 0, approved: 0, sent: 0, skipped: 0, failed: 0, }); const initQueue = useCallback((recipientList) => { const items = recipientList .filter((p) => p.trim()) .map((p, i) => ({ index: i, input: p.trim(), status: "queued", contactData: null, emailContent: null, htmlBody: null, error: null, })); setQueue(items); setCurrentIndex(0); setStats({ ...stats, queued: items.length }); return items; }, []); const updateItem = useCallback((index, updates) => { setQueue((prev) => prev.map((item) => item.index === index ? { ...item, ...updates } : item ) ); }, []); const nextItem = useCallback(() => { setCurrentIndex((prev) => { const next = prev + 1; return next < queue.length ? next : prev; }); }, [queue.length]); const currentItem = queue[currentIndex] || null; const recalcStats = useCallback(() => { const s = { queued: 0, researching: 0, generated: 0, approved: 0, sent: 0, skipped: 0, failed: 0, }; queue.forEach((item) => { if (s[item.status] !== undefined) s[item.status]++; }); setStats(s); }, [queue]); return { queue, currentIndex, currentItem, stats, initQueue, updateItem, nextItem, setCurrentIndex, recalcStats, }; }