'use client'; interface BackupStats { date: string; manual: number; automatic: number; total: number; } interface BackupTimelineChartProps { stats?: BackupStats[]; className?: string; } export function BackupTimelineChart({ stats = [], className = '' }: BackupTimelineChartProps) { // Protection contre les stats non-array const safeStats = Array.isArray(stats) ? stats : []; const error = safeStats.length === 0 ? 'Aucune donnée disponible' : null; // Convertir les stats en map pour accès rapide const statsMap = new Map(safeStats.map(s => [s.date, s])); // Générer les 30 derniers jours const days = Array.from({ length: 30 }, (_, i) => { const date = new Date(); date.setDate(date.getDate() - (29 - i)); // Utiliser la date locale pour éviter les décalages UTC const localDate = new Date(date.getTime() - date.getTimezoneOffset() * 60000); return localDate.toISOString().split('T')[0]; }); // Organiser en semaines (5 semaines de 6 jours + quelques jours) const weeks = []; for (let i = 0; i < days.length; i += 7) { weeks.push(days.slice(i, i + 7)); } const formatDateFull = (dateStr: string) => { const date = new Date(dateStr); return date.toLocaleDateString('fr-FR', { weekday: 'long', day: 'numeric', month: 'long' }); }; if (error) { return (