"use client"; import { useGridStore } from "@/features/grid/store/use-grid-store"; import { useAiCopilotStore } from "@/features/ai-copilot/store/use-ai-copilot-store"; import { BulkAiAnalyzer } from "./bulk-ai-analyzer"; import { useSaveDrafts } from "@/features/grid/hooks/use-save-drafts"; import { Loader2, CheckCircle, AlertCircle, RotateCcw } from "lucide-react"; import { useState, useTransition } from "react"; function Stat({ label, value, sub }: { label: string; value: string; sub?: string }) { // Determine color based on label to match the prototype const valColor = label.includes("CA") || label.includes("Marge") ? "text-emerald-600 dark:text-emerald-400" : "text-slate-900 dark:text-white"; return (
{label} {value} {sub && {sub}}
); } export function FloatingSummaryBar() { const { summary, resetDrafts, rows, filters } = useGridStore(); const { resetInsights } = useAiCopilotStore(); const [isPending, startTransition] = useTransition(); const [saveStatus, setSaveStatus] = useState<"idle" | "success" | "error">("idle"); const visibleCodeins = rows.map(r => r.codein); const { save, hasDrafts, count } = useSaveDrafts(filters.magasin || "TOTAL", visibleCodeins); const handleSave = () => { startTransition(async () => { const result = await save(); setSaveStatus(result.success ? "success" : "error"); setTimeout(() => setSaveStatus("idle"), 3000); }); }; const handleReset = () => { if (window.confirm("Es-tu sûr de vouloir annuler tous les changements non enregistrés (gammes et analyses IA) ?")) { resetDrafts(); resetInsights(); } }; return (
{hasDrafts && ( {count} modif. )}
); }