'use client'; import { useEffect, useState, useRef } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { CheckCircle, Loader2, XCircle, Truck } from 'lucide-react'; export default function CarrierAcceptPage() { const params = useParams(); const router = useRouter(); const token = params.token as string; const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [bookingId, setBookingId] = useState(null); const [isNewAccount, setIsNewAccount] = useState(false); // Prevent double API calls (React 18 StrictMode issue) const hasCalledApi = useRef(false); useEffect(() => { const acceptBooking = async () => { // Protection contre les doubles appels if (hasCalledApi.current) { return; } hasCalledApi.current = true; if (!token) { setError('Token manquant'); setLoading(false); return; } try { // Appeler l'API backend pour accepter le booking const response = await fetch(`http://localhost:4000/api/v1/csv-bookings/accept/${token}`, { method: 'GET', headers: { 'Content-Type': 'application/json', }, }); if (!response.ok) { const errorData = await response.json(); // Messages d'erreur personnalisés let errorMessage = errorData.message || 'Erreur lors de l\'acceptation du booking'; if (errorMessage.includes('status ACCEPTED')) { errorMessage = 'Ce booking a déjà été accepté. Vous ne pouvez pas l\'accepter à nouveau.'; } else if (errorMessage.includes('status REJECTED')) { errorMessage = 'Ce booking a déjà été refusé. Vous ne pouvez pas l\'accepter.'; } else if (errorMessage.includes('not found')) { errorMessage = 'Booking introuvable. Le lien peut avoir expiré.'; } throw new Error(errorMessage); } const data = await response.json(); // Stocker le token JWT pour l'auto-login if (data.autoLoginToken) { localStorage.setItem('carrier_access_token', data.autoLoginToken); } setBookingId(data.bookingId); setIsNewAccount(data.isNewAccount); setLoading(false); // Rediriger vers la page de détails après 2 secondes setTimeout(() => { router.push(`/carrier/dashboard/bookings/${data.bookingId}`); }, 2000); } catch (err) { console.error('Error accepting booking:', err); setError(err instanceof Error ? err.message : 'Erreur lors de l\'acceptation'); setLoading(false); } }; acceptBooking(); }, [token, router]); if (loading) { return (

Traitement en cours...

Nous acceptons votre réservation et créons votre compte.

); } if (error) { return (

Erreur

{error}

); } return (

Réservation Acceptée !

✅ La réservation a été acceptée avec succès

{isNewAccount && (

🎉 Compte transporteur créé !

Un email avec vos identifiants de connexion vous a été envoyé.

)}

Redirection vers les détails de la réservation...

Vous serez automatiquement redirigé dans 2 secondes
); }