'use client'; import { useEffect, useState, useRef } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { XCircle, Loader2, CheckCircle, Truck, MessageSquare } from 'lucide-react'; export default function CarrierRejectPage() { const params = useParams(); const router = useRouter(); const token = params.token as string; const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [bookingId, setBookingId] = useState(null); const [isNewAccount, setIsNewAccount] = useState(false); const [showSuccess, setShowSuccess] = useState(false); const [reason, setReason] = useState(''); // Prevent double API calls (React 18 StrictMode issue) const hasCalledApi = useRef(false); const handleReject = async () => { // Protection contre les doubles appels if (hasCalledApi.current) { return; } hasCalledApi.current = true; if (!token) { setError('Token manquant'); return; } setLoading(true); setError(null); try { // Construire l'URL avec la raison en query param si fournie const url = new URL(`http://localhost:4000/api/v1/csv-bookings/reject/${token}`); if (reason.trim()) { url.searchParams.append('reason', reason.trim()); } const response = await fetch(url.toString(), { 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 du refus du booking'; if (errorMessage.includes('status REJECTED')) { errorMessage = 'Ce booking a déjà été refusé. Vous ne pouvez pas le refuser à nouveau.'; } else if (errorMessage.includes('status ACCEPTED')) { errorMessage = 'Ce booking a déjà été accepté. Vous ne pouvez plus le refuser.'; } 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); setShowSuccess(true); 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 rejecting booking:', err); setError(err instanceof Error ? err.message : 'Erreur lors du refus'); setLoading(false); } }; if (loading) { return (

Traitement en cours...

Nous traitons votre refus de la réservation.

); } if (showSuccess) { return (

Réservation Refusée

❌ La réservation a été refusée

{reason && (

Raison : {reason}

)}
{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
); } if (error) { return (

Erreur

{error}

); } // Formulaire de refus return (

Refuser la Réservation

Vous êtes sur le point de refuser cette demande de réservation.