'use client'; import { useState } from 'react'; import { ManagerSummary } from '@/services/manager-summary'; import { Card, CardHeader, CardContent } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { TagDisplay } from '@/components/ui/TagDisplay'; import { getPriorityConfig } from '@/lib/status-config'; import { useTasksContext } from '@/contexts/TasksContext'; import { MetricsTab } from './MetricsTab'; import { format } from 'date-fns'; import { fr } from 'date-fns/locale'; interface ManagerWeeklySummaryProps { initialSummary: ManagerSummary; } export default function ManagerWeeklySummary({ initialSummary }: ManagerWeeklySummaryProps) { const [summary] = useState(initialSummary); const [activeView, setActiveView] = useState<'narrative' | 'accomplishments' | 'challenges' | 'metrics'>('narrative'); const { tags: availableTags } = useTasksContext(); const handleRefresh = () => { // SSR - refresh via page reload window.location.reload(); }; const formatPeriod = () => { return `Semaine du ${format(summary.period.start, 'dd MMM', { locale: fr })} au ${format(summary.period.end, 'dd MMM yyyy', { locale: fr })}`; }; const getPriorityBadgeStyle = (priority: 'low' | 'medium' | 'high') => { const config = getPriorityConfig(priority); const baseClasses = 'text-xs px-2 py-0.5 rounded font-medium'; switch (config.color) { case 'blue': return `${baseClasses} bg-blue-100 dark:bg-blue-900/20 text-blue-600 dark:text-blue-400`; case 'yellow': return `${baseClasses} bg-yellow-100 dark:bg-yellow-900/20 text-yellow-600 dark:text-yellow-400`; case 'purple': return `${baseClasses} bg-purple-100 dark:bg-purple-900/20 text-purple-600 dark:text-purple-400`; case 'red': return `${baseClasses} bg-red-100 dark:bg-red-900/20 text-red-600 dark:text-red-400`; default: return `${baseClasses} bg-gray-100 dark:bg-gray-900/20 text-gray-600 dark:text-gray-400`; } }; return (
{/* Header avec navigation */}

👔 Résumé Manager

{formatPeriod()}

{/* Navigation des vues */}
{/* Vue Executive / Narrative */} {activeView === 'narrative' && (
{/* Résumé narratif */}

📊 Résumé de la semaine

🎯 Points clés accomplis

{summary.narrative.weekHighlight}

⚡ Défis traités

{summary.narrative.mainChallenges}

🔮 Focus semaine prochaine

{summary.narrative.nextWeekFocus}

{/* Métriques rapides */}

📈 Métriques en bref

{summary.metrics.totalTasksCompleted}
Tâches complétées
dont {summary.metrics.highPriorityTasksCompleted} priorité haute
{summary.metrics.totalCheckboxesCompleted}
Todos complétés
dont {summary.metrics.meetingCheckboxesCompleted} meetings
{summary.keyAccomplishments.filter(a => a.impact === 'high').length}
Items à fort impact
/ {summary.keyAccomplishments.length} accomplissements
{summary.upcomingChallenges.filter(c => c.priority === 'high').length}
Priorités critiques
/ {summary.upcomingChallenges.length} enjeux
{/* Top accomplissements */}

🏆 Top accomplissements

{summary.keyAccomplishments.length === 0 ? (

Aucun accomplissement significatif trouvé cette semaine.

Ajoutez des tâches avec priorité haute/medium ou des meetings.

) : ( summary.keyAccomplishments.slice(0, 6).map((accomplishment, index) => (
{/* Barre colorée gauche */}
{/* Header compact */}
#{index + 1} {getPriorityConfig(accomplishment.impact).label}
{format(accomplishment.completedAt, 'dd/MM', { locale: fr })}
{/* Titre */}

{accomplishment.title}

{/* Tags */} {accomplishment.tags && accomplishment.tags.length > 0 && (
)} {/* Description si disponible */} {accomplishment.description && (

{accomplishment.description}

)} {/* Count de todos */} {accomplishment.todosCount > 0 && (
📋 {accomplishment.todosCount} todo{accomplishment.todosCount > 1 ? 's' : ''}
)}
)) )}
{/* Top challenges */}

🎯 Top enjeux à venir

{summary.upcomingChallenges.length === 0 ? (

Aucun enjeu prioritaire trouvé.

Ajoutez des tâches non complétées avec priorité haute/medium.

) : ( summary.upcomingChallenges.slice(0, 6).map((challenge, index) => (
{/* Barre colorée gauche */}
{/* Header compact */}
#{index + 1} {getPriorityConfig(challenge.priority).label}
{challenge.deadline && ( {format(challenge.deadline, 'dd/MM', { locale: fr })} )}
{/* Titre */}

{challenge.title}

{/* Tags */} {challenge.tags && challenge.tags.length > 0 && (
)} {/* Description si disponible */} {challenge.description && (

{challenge.description}

)} {/* Count de todos */} {challenge.todosCount > 0 && (
📋 {challenge.todosCount} todo{challenge.todosCount > 1 ? 's' : ''}
)}
)) )}
)} {/* Vue détaillée des accomplissements */} {activeView === 'accomplishments' && (

✅ Accomplissements de la semaine

{summary.keyAccomplishments.length} accomplissements significatifs • {summary.metrics.totalTasksCompleted} tâches • {summary.metrics.totalCheckboxesCompleted} todos complétés

{summary.keyAccomplishments.map((accomplishment, index) => (
{/* Barre colorée gauche */}
{/* Header compact */}
#{index + 1} {getPriorityConfig(accomplishment.impact).label}
{format(accomplishment.completedAt, 'dd/MM', { locale: fr })}
{/* Titre */}

{accomplishment.title}

{/* Tags */} {accomplishment.tags && accomplishment.tags.length > 0 && (
)} {/* Description si disponible */} {accomplishment.description && (

{accomplishment.description}

)} {/* Count de todos */} {accomplishment.todosCount > 0 && (
📋 {accomplishment.todosCount} todo{accomplishment.todosCount > 1 ? 's' : ''}
)}
))}
)} {/* Vue détaillée des challenges */} {activeView === 'challenges' && (

🎯 Enjeux et défis à venir

{summary.upcomingChallenges.length} défis identifiés • {summary.upcomingChallenges.filter(c => c.priority === 'high').length} priorité haute • {summary.upcomingChallenges.filter(c => c.blockers.length > 0).length} avec blockers

{summary.upcomingChallenges.map((challenge, index) => (
{/* Barre colorée gauche */}
{/* Header compact */}
#{index + 1} {getPriorityConfig(challenge.priority).label}
{challenge.deadline && ( {format(challenge.deadline, 'dd/MM', { locale: fr })} )}
{/* Titre */}

{challenge.title}

{/* Tags */} {challenge.tags && challenge.tags.length > 0 && (
)} {/* Description si disponible */} {challenge.description && (

{challenge.description}

)} {/* Count de todos */} {challenge.todosCount > 0 && (
📋 {challenge.todosCount} todo{challenge.todosCount > 1 ? 's' : ''}
)}
))}
)} {/* Vue Métriques */} {activeView === 'metrics' && ( )}
); }