"use client"; import { useState } from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useAuth } from "@/contexts/AuthContext"; import { useGame } from "@/hooks/useGame"; import { ticketCodeSchema, TicketCodeFormData } from "@/lib/validations"; import { Input } from "@/components/ui/Input"; import Button from "@/components/Button"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/Card"; import { Modal } from "@/components/ui/Modal"; import { PRIZE_CONFIG } from "@/utils/constants"; import { PlayGameResponse } from "@/types"; import { useRouter } from "next/navigation"; import { ROUTES } from "@/utils/constants"; import Link from "next/link"; export default function JeuxPage() { const { user, isAuthenticated } = useAuth(); const { play, isPlaying } = useGame(); const router = useRouter(); const [showResultModal, setShowResultModal] = useState(false); const [gameResult, setGameResult] = useState(null); const [errorMessage, setErrorMessage] = useState(""); const { register, handleSubmit, reset, formState: { errors }, } = useForm({ resolver: zodResolver(ticketCodeSchema), }); const onSubmit = async (data: TicketCodeFormData) => { // Réinitialiser le message d'erreur setErrorMessage(""); // Si non connecté, rediriger vers login if (!isAuthenticated) { router.push(`${ROUTES.LOGIN}?redirect=/jeux`); return; } const result = await play(data.ticketCode); if (result) { setGameResult(result); setShowResultModal(true); setErrorMessage(""); reset(); } else { // En cas d'erreur, afficher un message personnalisé setErrorMessage("Ce code a déjà été utilisé ou est invalide. Si vous avez déjà utilisé ce code, consultez vos tickets dans 'Mes lots'."); } }; const closeModal = () => { setShowResultModal(false); setGameResult(null); }; const prizeConfig = gameResult?.prize ? PRIZE_CONFIG[gameResult.prize.type as keyof typeof PRIZE_CONFIG] : null; return (
{/* Formulaire Section */}
🎁 Jouez maintenant !
{isAuthenticated ? (

Bonjour {user?.firstName}, entrez le code de 10 caractères présent sur votre ticket de caisse

) : (

💡 Vous devez être connecté pour valider votre code. Connectez-vous

)}
{errors.ticketCode && (

{errors.ticketCode.message}

)} {errorMessage && (

❌ {errorMessage}

→ Voir vos tickets déjà utilisés
)}

Format: TTP2025ABC (10 caractères)

{!isAuthenticated && (

Pas encore de compte ?

)} {isAuthenticated && (

💡 Bon à savoir :

  • Chaque code ne peut être utilisé qu'une seule fois
  • Consultez vos tickets sur la page Mes lots
)}
{/* Result Modal */} {gameResult && prizeConfig && (
{prizeConfig.icon}

Félicitations ! 🎉

Vous avez gagné :

{prizeConfig.name}

{gameResult.message || "Présentez-vous en magasin pour récupérer votre lot !"}

)}
); }