"use client" import { AlertTriangleIcon, ArrowRightIcon, CheckCircle2Icon, Loader2Icon, SparklesIcon, } from "lucide-react" import Link from "next/link" import { useCallback, useEffect, useState } from "react" import { toast } from "sonner" import { notifySetupReadinessUpdated, SETUP_READINESS_UPDATED_EVENT, } from "@/components/operator-readiness-indicator" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { useI18n } from "@/i18n/provider" import { applySetupQuickFix, fetchSetupReadiness, type SetupReadinessResponse, } from "@/lib/api/setup-readiness" export function SetupReadinessBanner({ onUpdated, }: { onUpdated?: () => void }) { const t = useI18n() const [readiness, setReadiness] = useState(null) const [fixing, setFixing] = useState(false) const loadReadiness = useCallback(async () => { try { const data = await fetchSetupReadiness() setReadiness(data) } catch { // Ignore in banner if failed } }, []) useEffect(() => { void loadReadiness() const handleUpdated = () => { void loadReadiness() } window.addEventListener(SETUP_READINESS_UPDATED_EVENT, handleUpdated) return () => { window.removeEventListener(SETUP_READINESS_UPDATED_EVENT, handleUpdated) } }, [loadReadiness]) async function handleQuickSetupAll() { setFixing(true) try { const res = await applySetupQuickFix({ action: "quick_setup_all" }) setReadiness(res.readiness) notifySetupReadinessUpdated() onUpdated?.() toast.success(t("setupWizard.quickFixSuccess")) } catch (error) { toast.error( error instanceof Error ? error.message : t("common.operationFailed"), ) } finally { setFixing(false) } } if (!readiness) { return null } const allReady = readiness.can_receive_requests_now && readiness.current_operator.can_receive_now && readiness.overall_status === "ok" if (allReady) { return null } const canQuickSetupAll = readiness.steps.some((s) => s.quick_fix_actions.includes("quick_setup_all"), ) const incompleteSteps = readiness.steps.filter((s) => s.status !== "ok") return (

{t("setupWizard.banner.title")}

{t("setupWizard.stepsProgress", { ready: readiness.ready_steps, total: readiness.total_steps, })}

{t("setupWizard.banner.description")}

{incompleteSteps.map((step) => ( {step.step_number}. {t(`setupWizard.steps.${step.key}.title`)} ))} {!readiness.current_operator.can_receive_now ? readiness.current_operator.blocker_codes.map((code) => ( {t(`setupWizard.operatorBlockers.${code}`)} )) : null}
{canQuickSetupAll ? ( ) : null}
) } export { CheckCircle2Icon }