'use client'; import { useState, useEffect } from 'react'; import { useAuth } from '@/hooks'; import { Card } from '@/components/ui'; import { Loading } from '@/components/ui/Loading'; import { API_BASE_URL } from '@/utils/constants'; import toast from 'react-hot-toast'; import { CheckCircle, XCircle, Clock, Calendar, User, Gift, RefreshCw, } from 'lucide-react'; interface HistoryTicket { id: string; code: string; status: string; played_at: string; claimed_at: string | null; validated_at: string | null; rejection_reason: string | null; user_email: string; user_name: string; prize_name: string; prize_value: string; } export default function EmployeeHistoryPage() { const { user, isAuthenticated } = useAuth(); const [history, setHistory] = useState([]); const [loading, setLoading] = useState(true); const [filter, setFilter] = useState<'ALL' | 'CLAIMED' | 'REJECTED'>('ALL'); useEffect(() => { if (isAuthenticated) { loadHistory(); } }, [isAuthenticated]); const loadHistory = async () => { try { setLoading(true); const token = localStorage.getItem('auth_token') || localStorage.getItem('token'); // Charger tous les tickets validés par cet employé const response = await fetch( `${API_BASE_URL}/employee/history`, { headers: { Authorization: `Bearer ${token}`, }, } ); if (!response.ok) { throw new Error('Erreur lors du chargement de l\'historique'); } const data = await response.json(); setHistory(data.data || []); } catch (error: any) { console.error('Error loading history:', error); toast.error(error.message || 'Erreur lors du chargement de l\'historique'); } finally { setLoading(false); } }; const getStatusBadge = (status: string) => { const badges = { PENDING: ( En attente ), CLAIMED: ( Validé ), REJECTED: ( Rejeté ), }; return badges[status as keyof typeof badges] || badges.PENDING; }; const filteredHistory = history.filter((ticket) => { if (filter === 'ALL') return true; return ticket.status === filter; }); const stats = { total: history.length, claimed: history.filter((t) => t.status === 'CLAIMED').length, rejected: history.filter((t) => t.status === 'REJECTED').length, }; if (loading) { return (
); } return (
{/* Header */}

Historique des Validations

Consultez l'historique de vos validations de tickets

{/* Statistics Cards */}

Total traités

{stats.total}

📊

Validés

{stats.claimed}

Rejetés

{stats.rejected}

{/* Filters */}
{/* History List */} {filteredHistory.length === 0 ? (
📝

Aucun ticket dans l'historique

{filter === 'ALL' ? 'Vous n\'avez pas encore validé de tickets' : `Aucun ticket ${filter === 'CLAIMED' ? 'validé' : 'rejeté'}`}

) : (
{filteredHistory.map((ticket) => (
{ticket.code} {getStatusBadge(ticket.status)}

Client

{ticket.user_name}

{ticket.user_email}

Lot

{ticket.prize_name}

{ticket.prize_value}€

Validé le{' '} {ticket.validated_at ? new Date(ticket.validated_at).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric', hour: '2-digit', minute: '2-digit', }) : 'N/A'}
{ticket.rejection_reason && (

Raison du rejet:

{ticket.rejection_reason}

)}
))}
)}
); }