'use client' import { useState } from 'react' import { useTranslations } from 'next-intl' import { Settings2, ChevronDown, ChevronRight, RotateCcw } from 'lucide-react' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogTrigger, DialogClose, } from '@/components/ui/dialog' import { Switch } from '@/components/ui/switch' import { KPI_DEFINITIONS, getDefaultPreferences } from '@/lib/reports/kpi-definitions' import type { KPIPreferences } from '@/types' interface KPISettingsDialogProps { preferences: KPIPreferences onSave: (prefs: KPIPreferences) => void saving: boolean } export function KPISettingsDialog({ preferences, onSave, saving }: KPISettingsDialogProps) { const t = useTranslations('kpi') const tCommon = useTranslations('common') const [draft, setDraft] = useState(preferences) const [expandedKpi, setExpandedKpi] = useState(null) const [open, setOpen] = useState(false) function handleOpen(isOpen: boolean) { if (isOpen) setDraft(preferences) setOpen(isOpen) } function toggleKpi(id: string) { setDraft((prev) => { const visible = prev.visibleKpis.includes(id) ? prev.visibleKpis.filter((k) => k !== id) : [...prev.visibleKpis, id] return { ...prev, visibleKpis: visible } }) } function setAccountOverride(kpiId: string, value: string) { const accounts = value .split(',') .map((s) => s.trim()) .filter((s) => /^\d{4}$/.test(s)) setDraft((prev) => ({ ...prev, accountOverrides: { ...prev.accountOverrides, [kpiId]: accounts, }, })) } function clearAccountOverride(kpiId: string) { setDraft((prev) => { const overrides = { ...prev.accountOverrides } delete overrides[kpiId] return { ...prev, accountOverrides: overrides } }) } function handleReset() { setDraft(getDefaultPreferences()) } function handleSave() { onSave(draft) setOpen(false) } return ( {t('settings_title')} {t('settings_subtitle')}
{KPI_DEFINITIONS.map((def) => { const isVisible = draft.visibleKpis.includes(def.id) const isExpanded = expandedKpi === def.id const hasOverride = def.customizableAccounts && draft.accountOverrides[def.id] && draft.accountOverrides[def.id].length > 0 const overrideValue = draft.accountOverrides[def.id]?.join(', ') ?? '' return (
toggleKpi(def.id)} />
{isExpanded && (

{t(`def_${def.id}_description`)}

{t('settings_formula_label')}

{t(`def_${def.id}_formula`)}

{t('settings_accounts_label')}

{t(`def_${def.id}_accounts`)}

{def.customizableAccounts && (
setAccountOverride(def.id, e.target.value) } placeholder={def.defaultAccounts.join(', ')} className="w-full rounded-md border border-input bg-background px-2.5 py-1.5 text-xs font-mono tabular-nums placeholder:text-muted-foreground/50" />

{t('settings_account_hint', { example: def.defaultAccounts.slice(0, 3).join(', ') })}

{hasOverride && ( )}
)}
)}
) })}
) }