'use client'; import { useState, useEffect } from 'react'; interface Trajet { id: string; date: string; adresseDepart: string; adresseArrivee: string; commentaire?: string | null; statut: string; adherent: { id: string; nom: string; prenom: string; telephone: string; email: string; }; chauffeur?: { id: string; nom: string; prenom: string; telephone: string; } | null; } interface CalendrierTrajetsProps { refreshTrigger?: number; } export default function CalendrierTrajets({ refreshTrigger }: CalendrierTrajetsProps) { const [trajets, setTrajets] = useState([]); const [loading, setLoading] = useState(true); const [currentDate, setCurrentDate] = useState(new Date()); const [selectedDate, setSelectedDate] = useState(null); const [selectedTrajets, setSelectedTrajets] = useState([]); const month = currentDate.getMonth(); const year = currentDate.getFullYear(); const firstDayOfMonth = new Date(year, month, 1); const lastDayOfMonth = new Date(year, month + 1, 0); const daysInMonth = lastDayOfMonth.getDate(); const startingDayOfWeek = firstDayOfMonth.getDay(); // Ajuster pour que lundi soit le premier jour (0 = lundi) const adjustedStartingDay = startingDayOfWeek === 0 ? 6 : startingDayOfWeek - 1; useEffect(() => { fetchTrajets(); }, [currentDate, refreshTrigger]); const fetchTrajets = async () => { setLoading(true); try { const startDate = new Date(year, month, 1).toISOString(); const endDate = new Date(year, month + 1, 0, 23, 59, 59).toISOString(); const response = await fetch( `/api/trajets?startDate=${startDate}&endDate=${endDate}` ); if (response.ok) { const data = await response.json(); setTrajets(data); } } catch (error) { console.error('Erreur lors du chargement des trajets:', error); } finally { setLoading(false); } }; const getTrajetsForDate = (date: Date): Trajet[] => { const dateStr = date.toISOString().split('T')[0]; return trajets.filter((trajet) => { const trajetDate = new Date(trajet.date).toISOString().split('T')[0]; return trajetDate === dateStr; }); }; const handleDateClick = (date: Date) => { setSelectedDate(date); const trajetsDuJour = getTrajetsForDate(date); setSelectedTrajets(trajetsDuJour); }; const goToPreviousMonth = () => { setCurrentDate(new Date(year, month - 1, 1)); }; const goToNextMonth = () => { setCurrentDate(new Date(year, month + 1, 1)); }; const goToToday = () => { setCurrentDate(new Date()); }; const formatDate = (date: Date) => { return date.toLocaleDateString('fr-FR', { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric', }); }; const formatTime = (dateString: string) => { const date = new Date(dateString); return date.toLocaleTimeString('fr-FR', { hour: '2-digit', minute: '2-digit' }); }; const days = ['Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim']; const calendarDays = []; // Ajouter les jours vides du début for (let i = 0; i < adjustedStartingDay; i++) { calendarDays.push(null); } // Ajouter les jours du mois for (let day = 1; day <= daysInMonth; day++) { calendarDays.push(new Date(year, month, day)); } return (
{/* En-tête du calendrier */}

{currentDate.toLocaleDateString('fr-FR', { month: 'long', year: 'numeric' })}

{loading ? (
Chargement...
) : ( <> {/* Grille du calendrier */}
{/* En-têtes des jours */} {days.map((day) => (
{day}
))} {/* Jours du calendrier */} {calendarDays.map((date, index) => { if (!date) { return
; } const trajetsDuJour = getTrajetsForDate(date); const isToday = date.getDate() === new Date().getDate() && date.getMonth() === new Date().getMonth() && date.getFullYear() === new Date().getFullYear(); const isSelected = selectedDate && date.getDate() === selectedDate.getDate() && date.getMonth() === selectedDate.getMonth() && date.getFullYear() === selectedDate.getFullYear(); return ( ); })}
{/* Détails des trajets du jour sélectionné */} {selectedDate && selectedTrajets.length > 0 && (

Trajets du {formatDate(selectedDate)}

{selectedTrajets.map((trajet) => (
{trajet.adherent.prenom} {trajet.adherent.nom} {formatTime(trajet.date)} {trajet.statut}
Départ: {trajet.adresseDepart}
Arrivée: {trajet.adresseArrivee}
{trajet.chauffeur ? (
Chauffeur: {trajet.chauffeur.prenom} {trajet.chauffeur.nom}
) : (
Aucun chauffeur assigné
)} {trajet.commentaire && (
{trajet.commentaire}
)}
))}
)} {selectedDate && selectedTrajets.length === 0 && (
Aucun trajet prévu pour le {formatDate(selectedDate)}
)} )}
); }