// La Paguita - Minijuego: Baja Médica (Paco)

(function () {
    const TOTAL_ROUNDS = 5;
    const BASE_TIME_MS = 2500;
    const TIME_DECREASE_MS = 300;

    const SINTOMAS = [
        { pregunta: '¿Dónde te duele?', correcta: '🦴', opciones: ['🦴', '👁️', '🦷', '🧠'] },
        { pregunta: '¿Qué síntomas tienes?', correcta: '🤒', opciones: ['🤒', '💪', '😊', '🏃'] },
        { pregunta: '¿Desde cuándo?', correcta: '📅', opciones: ['📅', '⏰', '🎉', '☀️'] },
        { pregunta: '¿Has tomado algo?', correcta: '💊', opciones: ['💊', '🍺', '🎮', '🛋️'] },
        { pregunta: '¿Puedes trabajar?', correcta: '😵', opciones: ['😵', '💪', '👍', '🏋️'] },
        { pregunta: '¿Duele al mover?', correcta: '😫', opciones: ['😫', '🕺', '🤸', '🏄'] },
        { pregunta: '¿Duermes bien?', correcta: '😴', opciones: ['😴', '🥳', '💃', '🎵'] },
        { pregunta: '¿Tienes apetito?', correcta: '🤢', opciones: ['🤢', '🍕', '🎂', '🥩'] },
        { pregunta: '¿Ánimo?', correcta: '😞', opciones: ['😞', '🥳', '😎', '💃'] },
    ];

    function shuffle(arr) {
        const a = [...arr];
        for (let i = a.length - 1; i > 0; i--) {
            const j = Math.floor(Math.random() * (i + 1));
            [a[i], a[j]] = [a[j], a[i]];
        }
        return a;
    }

    function init(area, contexto, onComplete) {
        // Pick 5 random symptoms
        const rounds = shuffle(SINTOMAS).slice(0, TOTAL_ROUNDS);
        let currentRound = 0;
        let hits = 0;
        let gameOver = false;
        let roundTimer = null;
        let barAnimFrame = null;
        let roundStart = 0;
        let inputLocked = false;

        area.innerHTML = `
            <div class="baja-progress" id="baja-progress"></div>
            <div class="baja-doctor">👨‍⚕️</div>
            <div class="baja-pregunta" id="baja-pregunta"></div>
            <div class="baja-timer-bar"><div class="baja-timer-fill" id="baja-fill"></div></div>
            <div class="baja-grid" id="baja-grid"></div>
        `;

        const progressEl = document.getElementById('baja-progress');
        const preguntaEl = document.getElementById('baja-pregunta');
        const fillEl = document.getElementById('baja-fill');
        const gridEl = document.getElementById('baja-grid');

        function updateProgress() {
            let html = '';
            for (let i = 0; i < TOTAL_ROUNDS; i++) {
                let cls = i < currentRound ? (i < hits + (currentRound - hits) ? '' : '') : '';
                html += `<span class="baja-dot" data-idx="${i}"></span>`;
            }
            progressEl.innerHTML = html;
            // Update colors based on results
            const dots = progressEl.querySelectorAll('.baja-dot');
            for (let i = 0; i < currentRound && i < results.length; i++) {
                dots[i].classList.add(results[i] ? 'ok' : 'fail');
            }
            if (currentRound < TOTAL_ROUNDS && dots[currentRound]) {
                dots[currentRound].classList.add('current');
            }
        }

        const results = [];

        function showRound() {
            if (currentRound >= TOTAL_ROUNDS) {
                finish();
                return;
            }

            inputLocked = false;
            const round = rounds[currentRound];
            preguntaEl.textContent = round.pregunta;

            // Shuffle options
            const shuffled = shuffle(round.opciones);
            gridEl.innerHTML = shuffled.map((emoji, i) => `
                <button class="baja-opcion" data-emoji="${emoji}">${emoji}</button>
            `).join('');

            // Add click handlers
            gridEl.querySelectorAll('.baja-opcion').forEach(btn => {
                btn.addEventListener('click', (e) => {
                    e.preventDefault();
                    handleAnswer(btn.dataset.emoji);
                });
            });

            updateProgress();

            const timeForThis = BASE_TIME_MS - (currentRound * TIME_DECREASE_MS);
            roundStart = performance.now();
            fillEl.style.width = '100%';
            fillEl.className = 'baja-timer-fill';

            if (barAnimFrame) cancelAnimationFrame(barAnimFrame);
            function animateBar() {
                const elapsed = performance.now() - roundStart;
                const pct = Math.max(0, 1 - elapsed / timeForThis) * 100;
                fillEl.style.width = pct + '%';
                if (pct < 30) fillEl.classList.add('urgent');
                if (elapsed < timeForThis) barAnimFrame = requestAnimationFrame(animateBar);
            }
            barAnimFrame = requestAnimationFrame(animateBar);

            roundTimer = setTimeout(() => {
                if (!inputLocked) handleAnswer(null);
            }, timeForThis);

            updateMinigameTimer((TOTAL_ROUNDS - currentRound) * (timeForThis / 1000));
        }

        function handleAnswer(emoji) {
            if (inputLocked || gameOver) return;
            inputLocked = true;
            clearTimeout(roundTimer);
            if (barAnimFrame) cancelAnimationFrame(barAnimFrame);

            const round = rounds[currentRound];
            const correct = emoji === round.correcta;

            if (correct) hits++;
            results.push(correct);

            // Flash feedback
            gridEl.querySelectorAll('.baja-opcion').forEach(btn => {
                if (btn.dataset.emoji === round.correcta) btn.classList.add('correct');
                else if (btn.dataset.emoji === emoji && !correct) btn.classList.add('wrong');
                btn.disabled = true;
            });

            currentRound++;
            setTimeout(showRound, 500);
        }

        // Keyboard 1-4
        function onKeyDown(e) {
            const idx = parseInt(e.key) - 1;
            if (idx >= 0 && idx < 4) {
                const btns = gridEl.querySelectorAll('.baja-opcion');
                if (btns[idx] && !btns[idx].disabled) {
                    e.preventDefault();
                    handleAnswer(btns[idx].dataset.emoji);
                }
            }
        }
        document.addEventListener('keydown', onKeyDown);

        function finish() {
            gameOver = true;
            document.removeEventListener('keydown', onKeyDown);

            const personaje = getPersonajeActual();
            const mult = personaje && personaje.bonus ? personaje.bonus.paguitas : 1;
            const perfecto = hits === TOTAL_ROUNDS;

            let paguitas, papeles;
            if (hits >= 5) { paguitas = Math.floor(120 * mult); papeles = 3; }
            else if (hits >= 4) { paguitas = Math.floor(90 * mult); papeles = 2; }
            else if (hits >= 3) { paguitas = Math.floor(60 * mult); papeles = 1; }
            else { paguitas = Math.floor(20 * mult); papeles = 0; }

            const label = perfecto ? '🏆 ¡Baja de 6 meses!' : hits >= 3 ? '🩺 Baja concedida' : '👨‍⚕️ El médico sospecha...';
            preguntaEl.textContent = label;
            gridEl.innerHTML = '';
            updateMinigameScore(`${hits}/${TOTAL_ROUNDS} aciertos`);

            setTimeout(() => {
                onComplete({
                    tipo: 'baja_medica',
                    hits: hits,
                    total: TOTAL_ROUNDS,
                    paguitas: paguitas,
                    papeles: papeles,
                    perfecto: perfecto,
                    contexto: contexto
                });
            }, 1200);
        }

        updateProgress();
        setTimeout(showRound, 500);
    }

    registrarMinijuego('baja_medica', init);
})();
