'use client'; import { useEffect, useState } from 'react'; import { useRouter } from 'next/navigation'; import { FileText, CheckCircle, XCircle, Clock, TrendingUp, DollarSign, Euro, Activity, } from 'lucide-react'; interface DashboardStats { totalBookings: number; pendingBookings: number; acceptedBookings: number; rejectedBookings: number; acceptanceRate: number; totalRevenue: { usd: number; eur: number; }; recentActivities: any[]; } export default function CarrierDashboardPage() { const router = useRouter(); const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { fetchStats(); }, []); const fetchStats = async () => { try { const token = localStorage.getItem('carrier_access_token'); const response = await fetch('http://localhost:4000/api/v1/carrier-dashboard/stats', { headers: { Authorization: `Bearer ${token}`, }, }); if (!response.ok) throw new Error('Failed to fetch stats'); const data = await response.json(); setStats(data); } catch (error) { console.error('Error fetching stats:', error); } finally { setLoading(false); } }; if (loading) { return (

Chargement...

); } if (!stats) { return
Erreur de chargement des statistiques
; } const statCards = [ { title: 'Total Réservations', value: stats.totalBookings, icon: FileText, color: 'blue', }, { title: 'En attente', value: stats.pendingBookings, icon: Clock, color: 'yellow', }, { title: 'Acceptées', value: stats.acceptedBookings, icon: CheckCircle, color: 'green', }, { title: 'Refusées', value: stats.rejectedBookings, icon: XCircle, color: 'red', }, ]; return (
{/* Header */}

Tableau de bord

Vue d'ensemble de votre activité

{/* Stats Cards */}
{statCards.map((card) => { const Icon = card.icon; return (

{card.title}

{card.value}

); })}
{/* Revenue & Acceptance Rate */}
{/* Revenue */}

Revenus totaux

USD
${stats.totalRevenue.usd.toLocaleString()}
EUR
€{stats.totalRevenue.eur.toLocaleString()}
{/* Acceptance Rate */}

Taux d'acceptation

{stats.acceptanceRate.toFixed(1)}%

{stats.acceptedBookings} acceptées / {stats.totalBookings} total

{/* Recent Activities */}

Activité récente

{stats.recentActivities.length > 0 ? (
{stats.recentActivities.map((activity) => (

{activity.description}

{new Date(activity.createdAt).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', hour: '2-digit', minute: '2-digit', })}

{activity.type}
))}
) : (

Aucune activité récente

)}
); }