"use client" import { useState, useCallback } from "react" import { motion, AnimatePresence } from "framer-motion" import { GatoMascota } from "@/components/child/gato-mascota" import VocalCard from "@/components/child/vocal-card" import TrazoLetra from "@/components/child/trazo-letra" import TemporizadorVisual from "@/components/child/temporizador-visual" import { speak } from "@/lib/speech" import { vocales } from "@/lib/pedagogia/borel-maisonny" import { getInitialState, evaluateResponse, isMastered } from "@/lib/pedagogia/errorless" type Step = "gesto" | "escuchar" | "trazar" | "elegir" | "completo" export default function LecturaSesion() { const [currentIndex, setCurrentIndex] = useState(0) const [step, setStep] = useState("gesto") const [promptState, setPromptState] = useState(getInitialState()) const [sessionComplete, setSessionComplete] = useState(false) const [running, setRunning] = useState(true) const [score, setScore] = useState(0) const vocal = vocales[currentIndex] const handleGestoComplete = useCallback(() => { speak(`Escuchá. Esta es la letra ${vocal.letra}. ${vocal.palabra}. ${vocal.fonema} ${vocal.fonema} ${vocal.fonema}`) setStep("escuchar") }, [vocal]) const handleEscucharComplete = useCallback(() => { speak(`Ahora trazala con tu dedo`) setStep("trazar") }, []) const handleTrazoComplete = useCallback(() => { setScore((s) => s + 1) const newState = evaluateResponse(promptState, true) setPromptState(newState) if (isMastered(newState.level)) { speak(`¡Muy bien! Pasemos a la siguiente`) if (currentIndex < vocales.length - 1) { setCurrentIndex((i) => i + 1) setStep("gesto") setPromptState(getInitialState()) } else { setSessionComplete(true) setRunning(false) } } else { setStep("elegir") } }, [promptState, currentIndex]) const handleChoice = useCallback( (correct: boolean) => { const newState = evaluateResponse(promptState, correct) setPromptState(newState) if (correct) { setScore((s) => s + 1) } if (isMastered(newState.level)) { if (currentIndex < vocales.length - 1) { setCurrentIndex((i) => i + 1) setStep("gesto") setPromptState(getInitialState()) } else { setSessionComplete(true) setRunning(false) } } }, [promptState, currentIndex], ) if (sessionComplete) { return (

Puntuación: {score}/{vocales.length * 2}

) } return (
{ setRunning(false) setSessionComplete(true) }} running={running} /> {step === "gesto" && (
{vocal.imageEmoji}

{vocal.gesto}

)} {step === "escuchar" && (
{ speak(`${vocal.fonema}... de ${vocal.palabra}`) }} />
)} {step === "trazar" && (
)} {step === "elegir" && (

¿Cuál es la {vocal.letra.toUpperCase()}?

{[...vocales].sort(() => Math.random() - 0.5).slice(0, 3).map((v) => ( ))}
)}
) }