import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { participateApi } from '../services/game' import UserNav from '../components/UserNav' import { useHandleAuthError } from '../hooks/useHandleAuthError' function formatDateTime(date) { return date.toLocaleDateString('fr-FR', { day: '2-digit', month: 'long', year: 'numeric', hour: '2-digit', minute: '2-digit', }) } export default function SaisirCodeUnique() { const navigate = useNavigate() const handleAuthError = useHandleAuthError() const [code, setCode] = useState('') const [loading, setLoading] = useState(false) const [gain, setGain] = useState(null) const [claim, setClaim] = useState(null) const [wonAt, setWonAt] = useState(null) const [showDetail, setShowDetail] = useState(false) const handleSubmit = async (e) => { e.preventDefault() setLoading(true) try { const data = await participateApi(code.trim().toUpperCase()) setGain(data.gain) setClaim(data.claim) setWonAt(new Date()) } catch (err) { if (!handleAuthError(err)) { navigate('/perdu', { state: { message: err.message } }) } } finally { setLoading(false) } } const handleClose = () => { setGain(null) setClaim(null) setWonAt(null) setShowDetail(false) setCode('') } return (

Saisir mon code gagnant

Saisissez le code présent sur votre ticket

setCode(e.target.value.toUpperCase())} placeholder="Votre code" maxLength={10} required className="w-full border border-gray-200 rounded-lg px-4 py-3 text-sm text-gray-700 placeholder-gray-300 bg-white focus:outline-none focus:ring-1 focus:ring-[#006B6B] focus:border-[#006B6B]" />
{/* ── Overlay Félicitation ── */} {gain && !showDetail && (

Félicitation !

Vous avez obtenu une récompense

{code}

{gain.name}

{gain.description}

)} {/* ── Modal détail du lot ── */} {gain && showDetail && (
{/* En-tête coloré */}

Votre lot

{gain.name}

{/* Corps */}
{/* Description */}

{gain.description}

{/* Valeur */} {gain.value && (
Valeur estimée {gain.value} €
)} {/* Code utilisé */}
Code utilisé {code}
{/* Date & heure */} {wonAt && (
Obtenu le {formatDateTime(wonAt)}
)} {/* Statut */}
Statut En attente de remise
{/* Info remise */}

Présentez ce code en boutique Thé Tip Top pour récupérer votre lot.

{/* Actions */}
)}
) }