import KpiStatTile from '@/pages/logements/components/kpi-stat-tile';
import type { AutomationCounts } from '@/types/automatisations';
import { CheckCircle2, Clock, Hourglass, XCircle } from 'lucide-react';

const NS = 'automatisations';

type Translate = (namespace: string, key: string, fallback?: string) => string;

function count(value: number, locale: string): string {
    return new Intl.NumberFormat(locale.startsWith('en') ? 'en-US' : 'fr-FR').format(value);
}

/**
 * Le coup d'œil : ce qui attend quelqu'un, ce qui attend le canal, ce qui est
 * parti, ce qui a échoué. Couleurs = sens : ambre en attente, vert parti,
 * rouge échec.
 */
export function AutomationKpis({ counts, locale, t }: { counts: AutomationCounts; locale: string; t: Translate }) {
    return (
        <div className="grid grid-cols-2 gap-3 lg:grid-cols-4">
            <KpiStatTile
                label={t(NS, 'kpi_pending', 'À valider')}
                value={count(counts.pending, locale)}
                icon={Clock}
                accent="text-amber-600"
                hint={t(NS, 'kpi_pending_hint', 'Messages préparés par une règle « À valider » : ils ne partent qu’après votre relecture.')}
            />
            <KpiStatTile
                label={t(NS, 'kpi_waiting', 'En attente d’un fil')}
                value={count(counts.waiting, locale)}
                icon={Hourglass}
                accent="text-amber-600"
                hint={t(
                    NS,
                    'kpi_waiting_hint',
                    'Le fil de messagerie de la réservation n’est pas encore arrivé. Il est attendu jusqu’à 24 h après le moment prévu ; ensuite le message part par e-mail si le repli est activé, sinon il est écarté avec son motif.',
                )}
            />
            <KpiStatTile
                label={t(NS, 'kpi_sent', 'Envoyés (30 j)')}
                value={count(counts.sent30d, locale)}
                icon={CheckCircle2}
                accent="text-emerald-600"
                hint={t(NS, 'kpi_sent_hint', 'Messages réellement partis sur les 30 derniers jours, validés ou automatiques.')}
            />
            <KpiStatTile
                label={t(NS, 'kpi_failed', 'Échecs (30 j)')}
                value={count(counts.failed30d, locale)}
                icon={XCircle}
                accent="text-red-600"
                hint={t(NS, 'kpi_failed_hint', 'Refusés par le canal, ou au résultat inconnu : ils apparaissent dans « À traiter » avec leur motif.')}
            />
        </div>
    );
}
