'use client'; import { DeadlineTask } from '@/services/analytics/deadline-analytics'; import { Card } from '@/components/ui/Card'; interface CriticalDeadlinesCardProps { overdue: DeadlineTask[]; critical: DeadlineTask[]; warning: DeadlineTask[]; } export function CriticalDeadlinesCard({ overdue, critical, warning }: CriticalDeadlinesCardProps) { // Combiner toutes les tâches urgentes et trier par urgence const urgentTasks = [...overdue, ...critical, ...warning] .sort((a, b) => { // En retard d'abord, puis critique, puis attention const urgencyOrder: Record = { 'overdue': 0, 'critical': 1, 'warning': 2 }; if (urgencyOrder[a.urgencyLevel] !== urgencyOrder[b.urgencyLevel]) { return urgencyOrder[a.urgencyLevel] - urgencyOrder[b.urgencyLevel]; } // Si même urgence, trier par jours restants return a.daysRemaining - b.daysRemaining; }); const getUrgencyStyle = (task: DeadlineTask) => { if (task.urgencyLevel === 'overdue') { return { icon: '🔴', text: task.daysRemaining === -1 ? 'En retard de 1 jour' : `En retard de ${Math.abs(task.daysRemaining)} jours`, style: 'text-red-700 bg-red-50/40 border-red-200/60 dark:bg-red-950/20 dark:border-red-800/40 dark:text-red-300' }; } else if (task.urgencyLevel === 'critical') { return { icon: '🟠', text: task.daysRemaining === 0 ? 'Échéance aujourd\'hui' : task.daysRemaining === 1 ? 'Échéance demain' : `Dans ${task.daysRemaining} jours`, style: 'text-orange-700 bg-orange-50/40 border-orange-200/60 dark:bg-orange-950/20 dark:border-orange-800/40 dark:text-orange-300' }; } else { return { icon: '🟡', text: `Dans ${task.daysRemaining} jours`, style: 'text-yellow-700 bg-yellow-50/40 border-yellow-200/60 dark:bg-yellow-950/20 dark:border-yellow-800/40 dark:text-yellow-300' }; } }; const getPriorityIcon = (priority: string) => { switch (priority) { case 'urgent': return '🔥'; case 'high': return '⬆️'; case 'medium': return '➡️'; case 'low': return '⬇️'; default: return '❓'; } }; const getSourceIcon = (source: string) => { switch (source.toLowerCase()) { case 'jira': return '🔵'; case 'tfs': return '🟣'; case 'manual': return '✏️'; default: return '📋'; } }; if (urgentTasks.length === 0) { return (

Tâches Urgentes

🎉

Excellent !

Aucune tâche urgente ou critique

); } return (

Tâches Urgentes

{urgentTasks.length} tâche{urgentTasks.length > 1 ? 's' : ''}
{urgentTasks.map((task) => { const urgencyStyle = getUrgencyStyle(task); const getStyleClass = (urgencyLevel: string) => { if (urgencyLevel === 'overdue') { return 'outline-card-red'; } else if (urgencyLevel === 'critical') { return 'outline-card-orange'; } else { return 'outline-card-yellow'; } }; return (
{urgencyStyle.icon} {getSourceIcon(task.source)} {getPriorityIcon(task.priority)} {task.jiraKey && ( {task.jiraKey} )}

{task.title}

{urgencyStyle.text}
{task.tags.length > 0 && (
{task.tags.slice(0, 2).map((tag, index) => ( {tag} ))} {task.tags.length > 2 && ( +{task.tags.length - 2} )}
)}
); })}
{urgentTasks.length > 0 && (
{overdue.length > 0 && ( {overdue.length} en retard )} {critical.length > 0 && ( {critical.length} critique{critical.length > 1 ? 's' : ''} )} {warning.length > 0 && ( {warning.length} attention )}
)}
); }