'use client'; import { useState, useEffect } from 'react'; import { adminService } from '@/services/admin.service'; import { Prize, CreatePrizeData, UpdatePrizeData } from '@/types'; export default function PrizeManagement() { const [prizes, setPrizes] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); const [editingPrize, setEditingPrize] = useState(null); // Form state const [formData, setFormData] = useState({ name: '', type: 'PHYSICAL', description: '', value: '', probability: 0, stock: 0, }); useEffect(() => { loadPrizes(); }, []); const loadPrizes = async () => { try { setLoading(true); setError(null); const data = await adminService.getAllPrizes(); setPrizes(data || []); } catch (err: any) { setError(err.message || 'Erreur lors du chargement des prix'); setPrizes([]); } finally { setLoading(false); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { if (editingPrize) { await adminService.updatePrize(editingPrize.id, formData as UpdatePrizeData); } else { await adminService.createPrize(formData); } resetForm(); loadPrizes(); } catch (err: any) { alert(err.message || 'Erreur lors de la sauvegarde'); } }; const handleEdit = (prize: Prize) => { setEditingPrize(prize); setFormData({ name: prize.name, type: prize.type, description: prize.description, value: prize.value, probability: prize.probability, stock: prize.stock, }); setIsModalOpen(true); }; const handleDelete = async (prizeId: string) => { if (!confirm('Êtes-vous sûr de vouloir supprimer ce prix ?')) return; try { await adminService.deletePrize(prizeId); loadPrizes(); } catch (err: any) { alert(err.message || 'Erreur lors de la suppression'); } }; const resetForm = () => { setFormData({ name: '', type: 'PHYSICAL', description: '', value: '', probability: 0, stock: 0, }); setEditingPrize(null); setIsModalOpen(false); }; if (loading) { return
Chargement des prix...
; } return (

Gestion des Prix

{error && (
{error}
)} {/* Liste des prix */} {prizes.length === 0 ? (
Aucun prix trouvé. Cliquez sur "Ajouter un prix" pour commencer.
) : (
{prizes.map((prize) => (

{prize.name}

{prize.isActive ? 'Actif' : 'Inactif'}

{prize.description}

Type: {prize.type}

Valeur: {prize.value}€

{/* Affichage spécial pour le Grand Prix (tirage au sort) */} {prize.type === 'GRAND_PRIZE' ? ( <>

Probabilité: N/A (Tirage au sort)

🎯 TIRAGE AU SORT

Attribué lors du tirage final parmi les participants éligibles

) : ( <>

Probabilité: {(prize.probability * 100).toFixed(1)}%

Stock généré: {prize.initialStock !== undefined ? prize.initialStock : prize.stock}

Stock restant:{' '} {prize.initialStock - (prize.ticketsUsed || 0)}

{prize.ticketsUsed !== undefined && prize.ticketsUsed > 0 && (

Tickets utilisés: {prize.ticketsUsed}

)} )}
))}
)}
); }