/**
 * Temporizador de Uso de la Palabra
 * Sprint 12 — Brújula Virtual / FONDOENERGIA
 *
 * Uso:
 *   UsoPalabra.iniciar(segundos)  → inicia cuenta regresiva
 *   UsoPalabra.detener()          → cancela el temporizador
 */
const UsoPalabra = (() => {
    let intervalo = null;
    let segundosRestantes = 0;

    // Generar sonido de campana con Web Audio API (sin archivo externo)
    function reproducirCampana() {
        try {
            const ctx = new (window.AudioContext || window.webkitAudioContext)();
            const frecuencias = [880, 1100, 880];
            frecuencias.forEach((freq, i) => {
                const osc = ctx.createOscillator();
                const gain = ctx.createGain();
                osc.connect(gain);
                gain.connect(ctx.destination);
                osc.type = 'sine';
                osc.frequency.value = freq;
                gain.gain.setValueAtTime(0.4, ctx.currentTime + i * 0.18);
                gain.gain.exponentialRampToValueAtTime(0.001, ctx.currentTime + i * 0.18 + 0.6);
                osc.start(ctx.currentTime + i * 0.18);
                osc.stop(ctx.currentTime + i * 0.18 + 0.7);
            });
        } catch (e) {
            console.warn('Web Audio no disponible');
        }
    }

    function formatearTiempo(seg) {
        const m = Math.floor(seg / 60).toString().padStart(2, '0');
        const s = (seg % 60).toString().padStart(2, '0');
        return `${m}:${s}`;
    }

    function actualizarUI() {
        const display = document.getElementById('up-display');
        const ring    = document.getElementById('up-ring');
        if (!display || !ring) return;

        display.textContent = formatearTiempo(segundosRestantes);

        if (segundosRestantes <= 10 && segundosRestantes > 0) {
            ring.classList.add('up-pulsando');
            display.style.color = '#dc3545';
        } else {
            ring.classList.remove('up-pulsando');
            display.style.color = '';
        }
    }

    function tiempoAgotado() {
        clearInterval(intervalo);
        intervalo = null;
        reproducirCampana();

        const display = document.getElementById('up-display');
        if (display) {
            display.textContent = '¡TIEMPO!';
            display.style.color = '#dc3545';
        }

        // Mostrar alerta en el modal
        const alerta = document.getElementById('up-alerta');
        if (alerta) {
            alerta.classList.remove('d-none');
        }

        // Botón iniciar vuelve a estar disponible
        const btnIniciar = document.getElementById('btn-uso-palabra');
        if (btnIniciar) btnIniciar.disabled = false;
    }

    return {
        iniciar(segundos) {
            if (intervalo) clearInterval(intervalo);
            segundosRestantes = parseInt(segundos, 10);
            if (!segundosRestantes || segundosRestantes <= 0) return;

            // Ocultar alerta previa
            const alerta = document.getElementById('up-alerta');
            if (alerta) alerta.classList.add('d-none');

            const ring = document.getElementById('up-ring');
            if (ring) ring.classList.remove('up-pulsando');

            actualizarUI();

            intervalo = setInterval(() => {
                segundosRestantes--;
                actualizarUI();
                if (segundosRestantes <= 0) tiempoAgotado();
            }, 1000);

            // Deshabilitar botón iniciar mientras corre
            const btnIniciar = document.getElementById('btn-uso-palabra');
            if (btnIniciar) btnIniciar.disabled = true;
        },

        detener() {
            if (intervalo) {
                clearInterval(intervalo);
                intervalo = null;
            }
            const display = document.getElementById('up-display');
            if (display) {
                display.textContent = '00:00';
                display.style.color = '';
            }
            const ring = document.getElementById('up-ring');
            if (ring) ring.classList.remove('up-pulsando');

            const alerta = document.getElementById('up-alerta');
            if (alerta) alerta.classList.add('d-none');

            const btnIniciar = document.getElementById('btn-uso-palabra');
            if (btnIniciar) btnIniciar.disabled = false;
        }
    };
})();
