// src/components/gsc/gsc-snapshot-health-card.tsx — derniers runs du worker
// Rust de snapshots GSC (table gsc_snapshot_runs). Présentationnel ; rendu
// uniquement pour owner/admin (gating fait par la page).
import { Badge } from "@/components/ui/badge";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from "@/components/ui/table";
import {
  type GscSnapshotRun,
  type SnapshotRunStatus,
  snapshotRunStatus,
} from "@/lib/gsc/health";

const STATUS_LABEL: Record<SnapshotRunStatus, string> = {
  ok: "OK",
  partial: "Partiel",
  failed: "Échec",
  running: "En cours",
};
const STATUS_VARIANT: Record<
  SnapshotRunStatus,
  "default" | "secondary" | "destructive" | "outline"
> = {
  ok: "secondary",
  partial: "outline",
  failed: "destructive",
  running: "default",
};

export function GscSnapshotHealthCard({ runs }: { runs: GscSnapshotRun[] }) {
  return (
    <Card>
      <CardHeader>
        <CardTitle>Santé des snapshots quotidiens</CardTitle>
      </CardHeader>
      <CardContent>
        {runs.length === 0 ? (
          <p className="text-muted-foreground text-sm">
            Aucun run de snapshot pour l'instant (le worker tourne chaque nuit).
          </p>
        ) : (
          <Table>
            <TableHeader>
              <TableRow>
                <TableHead>Date</TableHead>
                <TableHead>Statut</TableHead>
                <TableHead className="text-right">Sites OK</TableHead>
                <TableHead className="text-right">Échecs</TableHead>
                <TableHead className="text-right">Lignes</TableHead>
                <TableHead>Erreur</TableHead>
              </TableRow>
            </TableHeader>
            <TableBody>
              {runs.map((run) => {
                const s = snapshotRunStatus(run);
                return (
                  <TableRow key={run.id}>
                    <TableCell>
                      {run.startedAt.toLocaleDateString("fr-FR", {
                        day: "numeric",
                        month: "short",
                        hour: "2-digit",
                        minute: "2-digit",
                      })}
                    </TableCell>
                    <TableCell>
                      <Badge variant={STATUS_VARIANT[s]}>
                        {STATUS_LABEL[s]}
                      </Badge>
                    </TableCell>
                    <TableCell className="text-right">{run.sitesOk}</TableCell>
                    <TableCell className="text-right">
                      {run.sitesFailed}
                    </TableCell>
                    <TableCell className="text-right">
                      {run.rowsUpserted}
                    </TableCell>
                    <TableCell className="max-w-[280px] truncate text-muted-foreground text-xs">
                      {run.error ?? "—"}
                    </TableCell>
                  </TableRow>
                );
              })}
            </TableBody>
          </Table>
        )}
      </CardContent>
    </Card>
  );
}
