// Papeles Para Todos - Inicialización y orquestación

function initGame() {
    setupVisibilityAutoSave();

    // Botones de pantalla inicial
    const startBtn = document.getElementById('start-btn');
    if (startBtn) startBtn.addEventListener('click', startGame);

    setupAudioControls();

    // ESC abre/cierra menú de pausa (solo si el juego está iniciado)
    document.addEventListener('keydown', (e) => {
        if (e.key !== 'Escape') return;
        if (!gameState || !gameState.juegoIniciado || gameState.juegoTerminado) return;
        const pauseModal = document.getElementById('pause-modal');
        const helpModal = document.getElementById('help-modal');
        const confirmModal = document.getElementById('confirm-modal');
        const boletinModal = document.getElementById('boletin-modal');
        const logrosModal = document.getElementById('logros-modal');
        if (helpModal && helpModal.classList.contains('active')) { cerrarAyuda(); return; }
        if (logrosModal && logrosModal.classList.contains('active')) { cerrarLogrosModal(); return; }
        if (confirmModal && confirmModal.classList.contains('active')) { cancelarConfirm(); return; }
        if (boletinModal && boletinModal.classList.contains('active')) {
            const cerrarBtn = document.getElementById('boletin-cerrar');
            if (cerrarBtn) cerrarBtn.click();
            else boletinModal.classList.remove('active');
            return;
        }
        if (pauseModal && pauseModal.classList.contains('active')) cerrarPausa();
        else mostrarMenuPausa();
    });

    // Continuar partida si hay guardada
    if (hasSavedGame() && loadGame()) {
        // Mostrar pantalla de juego directamente y reanudar el día actual
        mostrarGameScreen();
        updateDisplay();
        reanudarJornada();
        startAutoSave();
    }
}

function setupAudioControls() {
    const savedPrefs = loadAudioPrefs();
    if (savedPrefs) audioSystem.applyPrefs(savedPrefs);

    const musicToggle = document.getElementById('music-toggle-btn');
    const sfxToggle = document.getElementById('sfx-toggle-btn');
    const musicSlider = document.getElementById('music-volume-slider');
    const sfxSlider = document.getElementById('sfx-volume-slider');

    function refreshAudioUi() {
        const prefs = audioSystem.getPrefs();
        if (musicToggle) {
            musicToggle.textContent = prefs.musicEnabled ? '🎵' : '🔇';
            musicToggle.setAttribute('aria-pressed', String(!prefs.musicEnabled));
        }
        if (sfxToggle) {
            sfxToggle.textContent = prefs.sfxEnabled ? '🔊' : '🔇';
            sfxToggle.setAttribute('aria-pressed', String(!prefs.sfxEnabled));
        }
        if (musicSlider) musicSlider.value = Math.round(prefs.musicVolume * 100);
        if (sfxSlider) sfxSlider.value = Math.round(prefs.sfxVolume * 100);
    }

    function persist() {
        saveAudioPrefs(audioSystem.getPrefs());
    }

    if (musicToggle) {
        musicToggle.addEventListener('click', () => {
            const prefs = audioSystem.getPrefs();
            audioSystem.setMusicEnabled(!prefs.musicEnabled);
            persist();
            refreshAudioUi();
        });
    }
    if (sfxToggle) {
        sfxToggle.addEventListener('click', () => {
            const prefs = audioSystem.getPrefs();
            audioSystem.setSfxEnabled(!prefs.sfxEnabled);
            persist();
            refreshAudioUi();
            audioSystem.playClick();
        });
    }
    if (musicSlider) {
        musicSlider.addEventListener('input', (e) => {
            audioSystem.setMusicVolume(Number(e.target.value) / 100);
        });
        musicSlider.addEventListener('change', persist);
    }
    if (sfxSlider) {
        sfxSlider.addEventListener('input', (e) => {
            audioSystem.setSfxVolume(Number(e.target.value) / 100);
        });
        sfxSlider.addEventListener('change', () => {
            audioSystem.playClick();
            persist();
        });
    }

    refreshAudioUi();
}

// Lanza el primer render de la jornada cargada, inyectando el fichaje si aún
// no se ha hecho hoy (caso típico: guardar justo después del boletín).
function reanudarJornada() {
    if (!gameState || gameState.juegoTerminado) { renderEstacion(); return; }

    // Preparar los buses de audio; la música arrancará tras el primer gesto de usuario.
    audioSystem.initMusic();
    audioSystem.applyPrefs(audioSystem.getPrefs());

    const pila = Array.isArray(gameState.pilaDia) ? gameState.pilaDia : [];

    // Jornada cerrada pero día sin avanzar: el usuario salió en el modal de fin de jornada.
    // Se reconstruye el resumen desde el estado (los efectos de cerrarJornada ya están aplicados).
    if (pila.length > 0 && gameState.candidatoIndex >= pila.length) {
        if (esUltimoDia()) {
            mostrarFinJuego();
        } else {
            const aciertosOficiales = gameState.stats?.decisionesDiaActual?.aciertosOficiales || 0;
            mostrarResumenJornada({
                dia: gameState.dia,
                aprobados: gameState.aprobadosDia,
                rechazados: gameState.rechazadosDia,
                aciertosOficiales,
                fallosOficiales: gameState.stats?.decisionesDiaActual?.fallosOficiales || 0,
                decisionesNeutras: gameState.stats?.decisionesDiaActual?.neutras || 0,
                scoreDia: gameState.scoreDia,
                scoreTotal: gameState.scoreTotal,
                strikes: gameState.strikes,
                alineacion: gameState.alineacionMinisterial
            });
        }
        return;
    }

    if (gameState.juegoIniciado && !gameState.fichajeHechoHoy && gameState.candidatoIndex === 0) {
        mostrarFichajeModal(() => {
            gameState.fichajeHechoHoy = true;
            saveGame();
            renderEstacion();
            audioSystem.startMusic('full');
        });
        return;
    }
    renderEstacion();
    audioSystem.startMusic('full');
}

function startGame() {
    audioSystem.resume();
    audioSystem.initMusic();
    audioSystem.applyPrefs(audioSystem.getPrefs());
    audioSystem.playClick();
    initGameState();
    gameState.pilaDia = generarPilaDia(gameState.dia);
    gameState.juegoIniciado = true;

    mostrarGameScreen();
    updateDisplay();
    saveGame();
    startAutoSave();

    // Mostrar boletín del día al empezar, luego fichaje de las 09:00
    const boletin = getBoletinDelDia(gameState.dia);
    mostrarBoletin(boletin, () => {
        mostrarFichajeModal(() => {
            gameState.fichajeHechoHoy = true;
            saveGame();
            renderEstacion();
            audioSystem.startMusic('full');
        });
    });
}

function mostrarGameScreen() {
    const start = document.getElementById('start-screen');
    const game = document.getElementById('game-screen');
    if (start) start.style.display = 'none';
    if (game) game.style.display = 'block';
}

document.addEventListener('DOMContentLoaded', initGame);
