import { ResponsiveContainer, BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip } from 'recharts'; import type { IntelligenceGranularity, KpiTimeseriesPoint } from '@/infrastructure/http/api/intelligence'; type MetricKey = 'visits' | 'commands' | 'suggestedProducts' | 'revenueCents'; interface Props { points: KpiTimeseriesPoint[]; granularity: IntelligenceGranularity; metricKey: MetricKey; seriesLabel: string; color: string; valueFormatter?: (n: number) => string; } function formatTick(period: string, granularity: IntelligenceGranularity): string { const d = new Date(period); if (Number.isNaN(d.getTime())) return period; switch (granularity) { case 'hour': return d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', hour12: false }); case 'day': return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' }); case 'month': return d.toLocaleDateString(undefined, { month: 'short', year: 'numeric' }); case 'year': return d.getUTCFullYear().toString(); } } export function KpiBarChart({ points, granularity, metricKey, seriesLabel, color, valueFormatter }: Props) { const data = points.map((p) => ({ period: formatTick(p.period, granularity), value: p[metricKey] })); const fmt = valueFormatter ?? ((n: number) => n.toLocaleString()); return (