import { useMemo } from 'react'; export interface BulletChartProps { label: string; actual: number; target: number; ranges: [number, number, number]; // [poor, satisfactory, good/max] unit?: string; percentile?: number; inverse?: boolean; // true if lower is better (e.g., AHT) formatValue?: (value: number) => string; } export function BulletChart({ label, actual, target, ranges, unit = '', percentile, inverse = false, formatValue = (v) => v.toLocaleString() }: BulletChartProps) { const [poor, satisfactory, max] = ranges; const { actualPercent, targetPercent, rangePercents, performance } = useMemo(() => { const actualPct = Math.min((actual / max) * 100, 100); const targetPct = Math.min((target / max) * 100, 100); const poorPct = (poor / max) * 100; const satPct = (satisfactory / max) * 100; // Determine performance level let perf: 'poor' | 'satisfactory' | 'good'; if (inverse) { // Lower is better (e.g., AHT, hold time) if (actual <= satisfactory) perf = 'good'; else if (actual <= poor) perf = 'satisfactory'; else perf = 'poor'; } else { // Higher is better (e.g., FCR, CSAT) if (actual >= satisfactory) perf = 'good'; else if (actual >= poor) perf = 'satisfactory'; else perf = 'poor'; } return { actualPercent: actualPct, targetPercent: targetPct, rangePercents: { poor: poorPct, satisfactory: satPct }, performance: perf }; }, [actual, target, ranges, inverse, poor, satisfactory, max]); const performanceColors = { poor: 'bg-red-500', satisfactory: 'bg-amber-500', good: 'bg-emerald-500' }; const performanceLabels = { poor: 'Crítico', satisfactory: 'Aceptable', good: 'Óptimo' }; return (