import { useState } from 'react'; import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { useToast } from '@/hooks/use-toast'; import { Download, Save, Search, Eye, Trash2, BarChart3, AlertCircle } from 'lucide-react'; import { Sale } from '@/types/sale'; import { exportToCSV, formatDate } from '@/lib/export'; import { downloadBackup, getAutoBackup } from '@/lib/storage'; import SaleDetailsModal from './SaleDetailsModal'; interface SalesHistoryProps { sales: Sale[]; isLoading: boolean; error: string | null; onDeleteSale: (id: number) => Promise; } export default function SalesHistory({ sales, isLoading, error, onDeleteSale }: SalesHistoryProps) { const { toast } = useToast(); const [selectedSale, setSelectedSale] = useState(null); const [isDeleting, setIsDeleting] = useState(null); const handleExportCSV = () => { if (sales.length === 0) { toast({ title: "Aucune vente à exporter", description: "Il n'y a aucune vente enregistrée", }); return; } try { exportToCSV(sales); toast({ title: "Export réussi !", description: `${sales.length} vente(s) exportée(s)`, }); } catch (error) { toast({ title: "Erreur d'export", description: "Impossible d'exporter les données", variant: "destructive", }); } }; const handleDownloadBackup = () => { const backup = getAutoBackup(); if (!backup) { toast({ title: "Aucune sauvegarde disponible", description: "Aucun backup automatique trouvé", }); return; } try { downloadBackup(); toast({ title: "Backup téléchargé", description: "Sauvegarde téléchargée avec succès", }); } catch (error) { toast({ title: "Erreur", description: "Impossible de télécharger la sauvegarde", variant: "destructive", }); } }; const handleDiagnostic = () => { console.log('=== DIAGNOSTIC COMPLET ==='); console.log('Nombre de ventes:', sales.length); console.log('Données:', sales); console.log('LocalStorage backup:', getAutoBackup()); toast({ title: "Diagnostic affiché", description: "Vérifiez la console pour les détails", }); }; const handleDeleteSale = async (sale: Sale) => { const confirmed = window.confirm( `Supprimer définitivement la vente de ${sale.nom} ${sale.prenom} ?\n\n⚠️ Cette action est irréversible !\n\nID: ${sale.id}` ); if (!confirmed) return; try { setIsDeleting(sale.id); await onDeleteSale(sale.id); toast({ title: "Vente supprimée", description: `Vente de ${sale.nom} ${sale.prenom} supprimée`, }); } catch (error) { toast({ title: "Erreur", description: "Impossible de supprimer la vente", variant: "destructive", }); } finally { setIsDeleting(null); } }; const backup = getAutoBackup(); if (isLoading) { return (

Chargement des ventes...

); } if (error) { return (

{error}

); } return ( <>
Historique des Ventes

Gestion et export des ventes enregistrées

{/* Status Information */}
Données stockées localement ({sales.length} vente{sales.length !== 1 ? 's' : ''}) • Export CSV compatible Excel • Sauvegarde automatique à chaque ajout
{backup ? ( Dernier backup: {formatDate(backup.timestamp)} ({backup.recordCount} enreg.) ) : ( Dernier backup: Aucun )}
{sales.length === 0 ? (

Aucune vente enregistrée

) : (
Date Vendeur Client Produit Catégorie Quantité Actions {sales.map((sale) => ( {formatDate(sale.dateVente)} {sale.vendeur || 'Non spécifié'}
{sale.nom} {sale.prenom}
{sale.typeIdentite && (
{sale.typeIdentite}
)}
{sale.typeArticle}
{sale.gencode && (
{sale.gencode}
)}
{sale.categorie} {sale.quantite}
))}
)}
setSelectedSale(null)} /> ); }