/** * Payment Success Page * * Displayed after successful Stripe payment. Confirms the payment and activates the booking. */ 'use client'; import { useState, useEffect, useRef } from 'react'; import { useRouter, useParams, useSearchParams } from 'next/navigation'; import { CheckCircle, Loader2, AlertTriangle, Mail, ArrowRight } from 'lucide-react'; import { confirmBookingPayment } from '@/lib/api/bookings'; export default function PaymentSuccessPage() { const router = useRouter(); const params = useParams(); const searchParams = useSearchParams(); const bookingId = params.id as string; const sessionId = searchParams.get('session_id'); const [status, setStatus] = useState<'confirming' | 'success' | 'error'>('confirming'); const [error, setError] = useState(null); const confirmedRef = useRef(false); useEffect(() => { async function confirm() { if (!sessionId || !bookingId || confirmedRef.current) return; confirmedRef.current = true; try { await confirmBookingPayment(bookingId, sessionId); setStatus('success'); } catch (err) { console.error('Payment confirmation error:', err); setError( err instanceof Error ? err.message : 'Erreur lors de la confirmation du paiement' ); setStatus('error'); } } confirm(); }, [bookingId, sessionId]); if (!sessionId) { return (

Session invalide

Aucune session de paiement trouvee.

); } return (
{status === 'confirming' && ( <>

Confirmation du paiement...

Veuillez patienter pendant que nous verifions votre paiement et activons votre booking.

)} {status === 'success' && ( <>

Paiement confirme !

Votre commission a ete payee avec succes. Un email a ete envoye au transporteur avec votre demande de booking.

Email envoye au transporteur

Vous recevrez une notification des que le transporteur repond (sous 7 jours max)

)} {status === 'error' && ( <>

Erreur de confirmation

{error}

Si votre paiement a ete debite, contactez le support. Votre booking sera active manuellement.

)}
); }