'use client'; import { AuthGuard } from '@/components/AuthGuard'; import { DashboardLayout } from '@/components/DashboardLayout'; import { useQuery } from '@tanstack/react-query'; import { mailAccountsApi, processingRunsApi } from '@/lib/api'; import { Mail, Send, CheckCircle, AlertCircle, TrendingUp, Clock } from 'lucide-react'; interface StatCardProps { title: string; value: string | number; icon: React.ComponentType<{ className?: string }>; iconColor: string; trend?: string; } function StatCard({ title, value, icon: Icon, iconColor, trend }: StatCardProps) { return (

{title}

{value}

{trend && (
{trend}
)}
); } export default function DashboardPage() { const { data: accounts } = useQuery({ queryKey: ['mail-accounts'], queryFn: mailAccountsApi.list, }); const { data: runs, isLoading: runsLoading } = useQuery({ queryKey: ['processing-runs'], queryFn: () => processingRunsApi.list(), }); const stats = { totalAccounts: accounts?.length || 0, activeAccounts: accounts?.filter((a) => a.is_enabled).length || 0, emailsToday: runs ?.filter((r) => { const today = new Date().toDateString(); return new Date(r.started_at).toDateString() === today; }) .reduce((sum, r) => sum + r.emails_forwarded, 0) || 0, errors: runs?.filter((r) => r.emails_failed > 0).length || 0, }; return (
{/* Stats Grid */}
{/* Recent Processing Runs */}

Recent Processing Runs

{runsLoading ? (
) : runs && runs.length > 0 ? ( {runs.slice(0, 10).map((run) => { const account = accounts?.find((a) => a.id === run.mail_account_id); return ( ); })}
Account Started At Status Fetched Forwarded Errors
{account?.name || `Account ${run.mail_account_id}`}
{new Date(run.started_at).toLocaleString()}
{run.status} {run.emails_fetched} {run.emails_forwarded} {run.emails_failed > 0 ? ( {run.emails_failed} ) : ( 0 )}
) : (

No processing runs yet

)}
); }