'use client'; import { useState } from 'react'; import { ManagerSummary } from '@/services/analytics/manager-summary'; import { Card, CardHeader, CardContent } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { Tabs, TabItem } from '@/components/ui/Tabs'; import { AchievementCard } from '@/components/ui/AchievementCard'; import { ChallengeCard } from '@/components/ui/ChallengeCard'; import { useTasksContext } from '@/contexts/TasksContext'; import { MetricsTab } from './MetricsTab'; import { format } from 'date-fns'; import { fr } from 'date-fns/locale'; import { Tag } from '@/lib/types'; import { Emoji } from '@/components/ui/Emoji'; 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 handleTabChange = (tabId: string) => { setActiveView( tabId as 'narrative' | 'accomplishments' | 'challenges' | 'metrics' ); }; const handleRefresh = () => { // SSR - refresh via page reload window.location.reload(); }; const formatPeriod = () => { return `7 derniers jours (${format(summary.period.start, 'dd MMM', { locale: fr })} - ${format(summary.period.end, 'dd MMM yyyy', { locale: fr })})`; }; // Configuration des onglets const tabItems: TabItem[] = [ { id: 'narrative', label: 'Vue Executive', icon: '📝' }, { id: 'accomplishments', label: 'Accomplissements', icon: '✅', count: summary.keyAccomplishments.length, }, { id: 'challenges', label: 'Enjeux à venir', icon: '🎯', count: summary.upcomingChallenges.length, }, { id: 'metrics', label: 'Métriques', icon: '📊' }, ]; return (
{/* Header avec navigation */}

Weekly

{formatPeriod()}

{activeView !== 'metrics' && ( )}
{/* Navigation des vues */} {/* Vue Executive / Narrative */} {activeView === 'narrative' && (
{/* Section principale : Résumé + Métriques côte à côte */}
{/* Résumé narratif */}

Résumé de la semaine

Points clés accomplis

{summary.narrative.weekHighlight}

Défis traités

{summary.narrative.mainChallenges}

Focus 7 prochains jours

{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) => ( )) )}
{/* 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) => ( )) )}
)} {/* Vue détaillée des accomplissements */} {activeView === 'accomplishments' && (

Accomplissements des 7 derniers jours

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

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

Aucun accomplissement significatif trouvé cette semaine.

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

) : (
{summary.keyAccomplishments.map((accomplishment, index) => ( ))}
)}
)} {/* 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.length === 0 ? (

Aucun enjeu prioritaire trouvé.

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

) : (
{summary.upcomingChallenges.map((challenge, index) => ( ))}
)}
)} {/* Vue Métriques */} {activeView === 'metrics' && }
); }