/** * Commission Payment Page * * Shows booking summary and commission amount, allows payment via Stripe or bank transfer */ 'use client'; import { useState, useEffect } from 'react'; import { useRouter, useParams } from 'next/navigation'; import { CreditCard, Building2, ArrowLeft, Loader2, AlertTriangle, CheckCircle } from 'lucide-react'; import { getCsvBooking, payBookingCommission } from '@/lib/api/bookings'; interface BookingData { id: string; bookingNumber?: string; carrierName: string; carrierEmail: string; origin: string; destination: string; volumeCBM: number; weightKG: number; palletCount: number; priceEUR: number; priceUSD: number; primaryCurrency: string; transitDays: number; containerType: string; status: string; commissionRate?: number; commissionAmountEur?: number; } export default function PayCommissionPage() { const router = useRouter(); const params = useParams(); const bookingId = params.id as string; const [booking, setBooking] = useState(null); const [loading, setLoading] = useState(true); const [paying, setPaying] = useState(false); const [error, setError] = useState(null); useEffect(() => { async function fetchBooking() { try { const data = await getCsvBooking(bookingId); setBooking(data as any); // If booking is not in PENDING_PAYMENT status, redirect if (data.status !== 'PENDING_PAYMENT') { router.replace('/dashboard/bookings'); } } catch (err) { console.error('Failed to fetch booking:', err); setError('Impossible de charger les details du booking'); } finally { setLoading(false); } } if (bookingId) { fetchBooking(); } }, [bookingId, router]); const handlePayByCard = async () => { setPaying(true); setError(null); try { const result = await payBookingCommission(bookingId); // Redirect to Stripe Checkout window.location.href = result.sessionUrl; } catch (err) { console.error('Payment error:', err); setError(err instanceof Error ? err.message : 'Erreur lors de la creation du paiement'); setPaying(false); } }; const formatPrice = (price: number, currency: string) => { return new Intl.NumberFormat('fr-FR', { style: 'currency', currency, }).format(price); }; if (loading) { return (
Chargement...
); } if (error && !booking) { return (

{error}

); } if (!booking) return null; const commissionAmount = booking.commissionAmountEur || 0; const commissionRate = booking.commissionRate || 0; return (
{/* Header */}

Paiement de la commission

Finalisez votre booking en payant la commission de service

{/* Error */} {error && (

{error}

)} {/* Booking Summary */}

Recapitulatif du booking

{booking.bookingNumber && (
Numero : {booking.bookingNumber}
)}
Transporteur : {booking.carrierName}
Trajet : {booking.origin} → {booking.destination}
Volume / Poids : {booking.volumeCBM} CBM / {booking.weightKG} kg
Transit : {booking.transitDays} jours
Prix transport : {formatPrice(booking.priceEUR, 'EUR')}
{/* Commission Details */}

Commission de service

Commission ({commissionRate}% du prix transport)

{formatPrice(booking.priceEUR, 'EUR')} x {commissionRate}%

{formatPrice(commissionAmount, 'EUR')}

Apres le paiement, votre demande sera envoyee par email au transporteur ({booking.carrierEmail}). Vous recevrez une notification des que le transporteur repond.

{/* Payment Methods */}
{/* Pay by Card (Stripe) */} {/* Pay by Bank Transfer (informational) */}

Payer par virement bancaire

Beneficiaire : XPEDITIS SAS
IBAN : FR76 XXXX XXXX XXXX XXXX XXXX XXX
BIC : XXXXXXXX
Montant : {formatPrice(commissionAmount, 'EUR')}
Reference : {booking.bookingNumber || booking.id.slice(0, 8)}

Le traitement du virement peut prendre 1 a 3 jours ouvrables. Votre booking sera active une fois le paiement recu et verifie.

); }