'use client'; import { useState } from 'react'; import TrajetForm from './TrajetForm'; import ValidationModal from './ValidationModal'; import ConfirmModal from './ConfirmModal'; import { useNotification } from './NotificationProvider'; 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 TrajetDetailModalProps { trajet: Trajet; onClose: () => void; onUpdate: () => void; } export default function TrajetDetailModal({ trajet, onClose, onUpdate }: TrajetDetailModalProps) { const { showNotification } = useNotification(); const [showEditForm, setShowEditForm] = useState(false); const [showValidationModal, setShowValidationModal] = useState(false); const [showCancelConfirm, setShowCancelConfirm] = useState(false); const [showArchiveConfirm, setShowArchiveConfirm] = useState(false); const [loading, setLoading] = useState(false); const formatDate = (dateString: string) => { const date = new Date(dateString); 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 handleCancelClick = () => { setShowCancelConfirm(true); }; const handleCancel = async () => { setShowCancelConfirm(false); setLoading(true); try { const response = await fetch(`/api/trajets/${trajet.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ statut: 'Annulé', }), }); if (response.ok) { showNotification('info', 'Trajet annulé avec succès'); onUpdate(); onClose(); } else { const error = await response.json(); showNotification('error', error.error || 'Erreur lors de l\'annulation du trajet'); } } catch (error) { console.error('Erreur lors de l\'annulation:', error); showNotification('error', 'Erreur lors de l\'annulation du trajet'); } finally { setLoading(false); } }; const handleArchiveClick = () => { setShowArchiveConfirm(true); }; const handleArchive = async () => { setShowArchiveConfirm(false); setLoading(true); try { const response = await fetch(`/api/trajets/${trajet.id}/archive`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, }); if (response.ok) { showNotification('info', 'Trajet archivé avec succès'); onUpdate(); onClose(); } else { const error = await response.json(); showNotification('error', error.error || 'Erreur lors de l\'archivage du trajet'); } } catch (error) { console.error('Erreur lors de l\'archivage:', error); showNotification('error', 'Erreur lors de l\'archivage du trajet'); } finally { setLoading(false); } }; const getInitials = (nom: string, prenom: string) => { return `${prenom.charAt(0)}${nom.charAt(0)}`.toUpperCase(); }; const getStatutColor = (statut: string) => { switch (statut) { case 'Terminé': return 'bg-green-100 text-green-700 border-green-200'; case 'En cours': return 'bg-blue-100 text-blue-700 border-blue-200'; case 'Annulé': return 'bg-red-100 text-red-700 border-red-200'; case 'Validé': return 'bg-purple-100 text-purple-700 border-purple-200'; default: return 'bg-gray-100 text-gray-700 border-gray-200'; } }; if (showEditForm) { return ( setShowEditForm(false)} onSuccess={() => { onUpdate(); setShowEditForm(false); onClose(); }} trajetToEdit={trajet} /> ); } if (showValidationModal) { return ( setShowValidationModal(false)} onSuccess={() => { onUpdate(); setShowValidationModal(false); onClose(); }} /> ); } return (
{/* Header */}

Détails du trajet

Informations complètes du trajet

{/* Content */}
{/* Statut */}
Statut {trajet.statut}
{/* Adhérent */}
{getInitials(trajet.adherent.nom, trajet.adherent.prenom)}
{trajet.adherent.prenom} {trajet.adherent.nom}
{trajet.adherent.email}
{trajet.adherent.telephone}
{/* Chauffeur */} {trajet.chauffeur ? (
{getInitials(trajet.chauffeur.nom, trajet.chauffeur.prenom)}
{trajet.chauffeur.prenom} {trajet.chauffeur.nom}
{trajet.chauffeur.telephone}
) : (
Aucun chauffeur assigné
)} {/* Date et heure */}
{formatDate(trajet.date)}
{formatTime(trajet.date)}
{/* Adresses */}
A
{trajet.adresseDepart}
B
{trajet.adresseArrivee}
{/* Commentaire */} {trajet.commentaire && (

{trajet.commentaire}

)}
{/* Footer */}
{trajet.chauffeur && trajet.statut === 'Planifié' && ( )}
setShowCancelConfirm(false)} /> setShowArchiveConfirm(false)} />
); }