// Papeles Para Todos - Overlays (boletín, fin de jornada, fin de juego, pausa, ayuda)

// ===== Menú de pausa =====
function mostrarMenuPausa() {
    const modal = document.getElementById('pause-modal');
    if (!modal) return;
    modal.classList.add('active');
    if (typeof audioSystem !== 'undefined') {
        audioSystem.playClick();
        if (audioSystem.music && audioSystem.music.active) audioSystem.setMusicLayer('dim');
    }
}

function cerrarPausa() {
    const modal = document.getElementById('pause-modal');
    if (!modal) return;
    modal.classList.remove('active');
    if (typeof audioSystem !== 'undefined') {
        audioSystem.playClick();
        if (audioSystem.music && audioSystem.music.active) audioSystem.setMusicLayer('full');
    }
}

function mostrarAyuda() {
    const modal = document.getElementById('help-modal');
    if (!modal) return;
    modal.classList.add('active');
}

function cerrarAyuda() {
    const modal = document.getElementById('help-modal');
    if (modal) modal.classList.remove('active');
    if (typeof audioSystem !== 'undefined') audioSystem.playClick();
}

function confirmarNuevaPartida() {
    cerrarPausa();
    const modal = document.getElementById('confirm-modal');
    if (modal) modal.classList.add('active');
}

function cancelarConfirm() {
    const modal = document.getElementById('confirm-modal');
    if (modal) modal.classList.remove('active');
    if (typeof audioSystem !== 'undefined') audioSystem.playClick();
}

function nuevaPartidaConfirmada() {
    deleteSave();
    gameState = null;
    location.reload();
}



// ===== Modal narrativo genérico (desayunos, fichaje, recoger a Izan) =====
function mostrarViñetaNarrativa(viñeta, opciones, onClose) {
    const modal = document.getElementById('breakfast-modal');
    const body = document.getElementById('breakfast-body');
    if (!modal || !body || !viñeta) { if (typeof onClose === 'function') onClose(); return; }

    const cta = (opciones && opciones.cta) || 'VOLVER AL TRABAJO';

    body.innerHTML = `
        <div class="desayuno-emoji">${viñeta.emoji}</div>
        <h3 class="desayuno-titulo">${viñeta.titulo}</h3>
        <p class="desayuno-texto">${viñeta.texto}</p>
        <button id="desayuno-cerrar" class="btn-grande">${cta}</button>
    `;

    modal.classList.add('active');
    if (typeof audioSystem !== 'undefined') audioSystem.playDing();

    document.getElementById('desayuno-cerrar').addEventListener('click', () => {
        modal.classList.remove('active');
        if (typeof audioSystem !== 'undefined') audioSystem.playClick();
        if (typeof onClose === 'function') onClose();
    });
}

function mostrarDesayunoModal(numero, onClose) {
    const viñeta = (typeof getDesayunoAleatorio === 'function') ? getDesayunoAleatorio(numero) : null;
    const musicaActiva = typeof audioSystem !== 'undefined' && audioSystem.music && audioSystem.music.active;
    if (musicaActiva) audioSystem.setMusicLayer('reduced');
    mostrarViñetaNarrativa(viñeta, { cta: 'VOLVER AL TRABAJO' }, () => {
        if (musicaActiva) audioSystem.setMusicLayer('full');
        if (typeof onClose === 'function') onClose();
    });
}

function mostrarFichajeModal(onClose) {
    const viñeta = (typeof getFichajeAleatorio === 'function') ? getFichajeAleatorio() : null;
    mostrarViñetaNarrativa(viñeta, { cta: 'EMPEZAR LA JORNADA' }, onClose);
}

function mostrarIzanModal(onClose) {
    const viñeta = (typeof getIzanAleatorio === 'function') ? getIzanAleatorio() : null;
    const musicaActiva = typeof audioSystem !== 'undefined' && audioSystem.music && audioSystem.music.active;
    if (musicaActiva) audioSystem.setMusicLayer('reduced');
    mostrarViñetaNarrativa(viñeta, { cta: 'CORRER AL COLE' }, () => {
        if (musicaActiva) audioSystem.setMusicLayer('full');
        if (typeof onClose === 'function') onClose();
    });
}

function mostrarBoletin(boletin, onClose) {
    const modal = document.getElementById('boletin-modal');
    const body = document.getElementById('boletin-body');
    if (!modal || !body) return;

    const oficialesHtml = boletin.reglas
        .filter(r => r.oficial)
        .map(r => `<li class="regla-oficial"><strong>${r.tipo === 'aprobar_si' ? 'APROBAR' : 'RECHAZAR'}:</strong> ${r.descripcion} <span class="regla-bonus">+${r.bonus}</span></li>`)
        .join('');

    const oficiosasHtml = boletin.reglas
        .filter(r => !r.oficial)
        .map(r => `<li class="regla-oficiosa"><em>(Oficioso)</em> <strong>${r.tipo === 'aprobar_si' ? 'APROBAR' : 'RECHAZAR'}:</strong> ${r.descripcion} <span class="regla-bonus">+${r.bonus}</span></li>`)
        .join('');

    const esConsulta = typeof onClose !== 'function';
    const btnTexto = esConsulta ? 'VOLVER AL TRABAJO' : 'ENTENDIDO, A TRABAJAR';

    body.innerHTML = `
        <div class="boletin-codigo">${boletin.codigo}</div>
        <div class="boletin-fecha">${boletin.fecha}</div>
        <h2 class="boletin-titulo">${boletin.titulo}</h2>
        <div class="boletin-ministro">Firmado: ${boletin.ministro}</div>
        <p class="boletin-flavor">"${boletin.flavor}"</p>

        <div class="boletin-section">
            <h3>DIRECTRICES OFICIALES</h3>
            <ul class="boletin-reglas">${oficialesHtml || '<li>—</li>'}</ul>
        </div>

        ${oficiosasHtml ? `
        <div class="boletin-section boletin-section--oficiosa">
            <h3>INDICACIONES VERBALES DEL JEFE</h3>
            <ul class="boletin-reglas">${oficiosasHtml}</ul>
        </div>
        ` : ''}

        <div class="boletin-aviso-mecanica boletin-sin-cupo">
            <strong>Sin mínimo diario de aciertos:</strong> no hay penalización al cierre por volumen. Las directrices oficiales marcan strikes y alineación; el score suma bonus oficiales y oficiosos.
        </div>

        <button id="boletin-cerrar" class="btn-grande">${btnTexto}</button>
    `;

    modal.classList.add('active');
    if (esConsulta) {
        audioSystem.playClick();
    } else {
        audioSystem.playAlert();
    }

    document.getElementById('boletin-cerrar').addEventListener('click', () => {
        modal.classList.remove('active');
        audioSystem.playClick();
        // Al cerrar el boletín obligatorio (inicio de jornada), pulsar el botón
        // para recordar al jugador que puede reconsultarlo en cualquier momento.
        if (!esConsulta) {
            const btn = document.getElementById('boletin-btn');
            if (btn) {
                btn.classList.remove('boletin-btn--pulse');
                void btn.offsetWidth; // fuerza reflow para reiniciar animación
                btn.classList.add('boletin-btn--pulse');
                setTimeout(() => btn.classList.remove('boletin-btn--pulse'), 3600);
            }
        }
        if (typeof onClose === 'function') onClose();
    });
}

// Reabrir el boletín del día actual como consulta rápida durante la jornada
function mostrarBoletinActual() {
    if (typeof gameState === 'undefined' || !gameState) return;
    if (!gameState.juegoIniciado || gameState.juegoTerminado) return;
    const yaHayModal = document.querySelector('.modal.active');
    if (yaHayModal) return;
    const boletin = getBoletinDelDia(gameState.dia);
    if (!boletin) return;
    mostrarBoletin(boletin);
}

// Fin de jornada: cierra la actual, muestra resumen, y si no es el último día ofrece avanzar.
function finalizarJornada() {
    const resumen = cerrarJornada();
    updateDisplay();
    saveGame();

    if (esUltimoDia()) {
        mostrarFinJuego();
    } else {
        mostrarResumenJornada(resumen);
    }
}

function mostrarResumenJornada(resumen) {
    const modal = document.getElementById('finjornada-modal');
    const body = document.getElementById('finjornada-body');
    if (!modal || !body) return;

    body.innerHTML = `
        <h2>FIN DE JORNADA ${resumen.dia}</h2>
        <div class="fj-stats">
            <div class="fj-row"><span>Aprobados</span><strong>${resumen.aprobados}</strong></div>
            <div class="fj-row"><span>Rechazados</span><strong>${resumen.rechazados}</strong></div>
            <div class="fj-row"><span>Aciertos oficiales</span><strong>${resumen.aciertosOficiales}</strong></div>
            <div class="fj-row"><span>Incumplimientos oficiales</span><strong>${resumen.fallosOficiales}</strong></div>
            <div class="fj-row"><span>Casos neutrales</span><strong>${resumen.decisionesNeutras}</strong></div>
            <div class="fj-row"><span>Strikes</span><strong>${resumen.strikes}/${STRIKES_MAX}</strong></div>
            <div class="fj-row"><span>Alineación ministerial</span><strong>${resumen.alineacion}%</strong></div>
            <div class="fj-row fj-total"><span>Score del día</span><strong>${resumen.scoreDia}</strong></div>
            <div class="fj-row fj-total"><span>Score acumulado</span><strong>${resumen.scoreTotal}</strong></div>
        </div>
        <div class="fj-buttons">
            <button id="fj-siguiente" class="btn-grande">SIGUIENTE JORNADA →</button>
            <a href="../../index.html" class="btn-grande btn-secundario">GUARDAR Y SALIR</a>
        </div>
    `;

    modal.classList.add('active');
    audioSystem.stopMusic(1500);
    audioSystem.playFinDia();

    document.getElementById('fj-siguiente').addEventListener('click', () => {
        audioSystem.playClick();
        modal.classList.remove('active');
        avanzarDia();
        saveGame();
        updateDisplay();

        // Intentar disparar evento especial antes del boletín del nuevo día
        intentarDispararEvento(() => {
            const boletin = getBoletinDelDia(gameState.dia);
            mostrarBoletin(boletin, () => {
                mostrarFichajeModal(() => {
                    gameState.fichajeHechoHoy = true;
                    saveGame();
                    renderEstacion();
                    audioSystem.startMusic('full');
                });
            });
        });
    });
}

// Pantalla final con rating según alineación + score
function mostrarFinJuego() {
    const modal = document.getElementById('finjornada-modal');
    const body = document.getElementById('finjornada-body');
    if (!modal || !body) return;

    gameState.juegoTerminado = true;
    gameState.razonFin = 'completado';
    checkLogros();
    saveGame();

    const final = seleccionarFinal(gameState);
    const s = gameState.stats;
    const quoteHtml = final.quote ? `<div class="rating-quote">${final.quote}</div>` : '';

    const desbloqueados = getLogrosDesbloqueados();
    const logrosHtml = desbloqueados.length ? `
        <div class="endgame-logros">
            <h3>🏆 Logros desbloqueados (${desbloqueados.length}/${logrosData.length})</h3>
            <div class="endgame-logros-grid">
                ${desbloqueados.map(id => {
                    const l = logrosData.find(x => x.id === id);
                    return l ? `<div class="endgame-logro" title="${l.desc}"><span>${l.icono}</span> ${l.titulo}</div>` : '';
                }).join('')}
            </div>
        </div>
    ` : '';

    body.innerHTML = `
        <h2>EXPEDIENTE CERRADO</h2>
        <div class="fj-mvp-notice">Fin de la semana laboral. Tu expediente se envía a Recursos Humanos.</div>
        <div class="fj-stats">
            <div class="fj-row"><span>🧔 Yihadistas presuntos aprobados</span><strong>${s.yihadistasAprobados}</strong></div>
            <div class="fj-row"><span>🕴 Mafiosos presuntos aprobados</span><strong>${s.mafiososAprobados}</strong></div>
            <div class="fj-row"><span>👩‍🍼 Humanitarios aprobados</span><strong>${s.humanitariosAprobados}</strong></div>
            <div class="fj-row"><span>👱 Europeos regulares rechazados</span><strong>${s.europeosRechazados}</strong></div>
            <div class="fj-row"><span>🧑‍⚕️ Latinos regulares rechazados</span><strong>${s.latinosRechazados}</strong></div>
            <div class="fj-row"><span>⚠ Strikes acumulados</span><strong>${gameState.strikes}/${STRIKES_MAX}</strong></div>
            <div class="fj-row"><span>Alineación ministerial final</span><strong>${gameState.alineacionMinisterial}%</strong></div>
            <div class="fj-row fj-total"><span>SCORE FINAL</span><strong>${gameState.scoreTotal}</strong></div>
        </div>
        <div class="rating-box">
            <div class="rating-icon">${final.icono}</div>
            <div class="rating-title">${final.titulo}</div>
            <div class="rating-desc">${final.descripcion}</div>
            ${quoteHtml}
        </div>
        ${logrosHtml}
        <div class="fj-buttons">
            <button id="fj-reiniciar" class="btn-grande">NUEVA PARTIDA</button>
            <a href="../../index.html" class="btn-grande btn-secundario">VOLVER AL MENÚ</a>
        </div>
    `;
    modal.classList.add('active');
    audioSystem.stopMusic(2000);
    audioSystem.playFinDia();

    document.getElementById('fj-reiniciar').addEventListener('click', () => {
        deleteSave();
        location.reload();
    });

    if (typeof enviarPuntuacionAlRanking === 'function') {
        enviarPuntuacionAlRanking(gameState.scoreTotal);
    }
}

function terminarJuegoPorDespido() {
    const modal = document.getElementById('finjornada-modal');
    const body = document.getElementById('finjornada-body');
    if (!modal || !body) return;

    gameState.juegoTerminado = true;
    gameState.razonFin = 'despido';
    saveGame();

    body.innerHTML = `
        <h2 class="despido-titulo">🚫 DESPIDO FULMINANTE</h2>
        <p class="despido-desc">Has acumulado ${STRIKES_MAX} strikes por incumplir directrices oficiales. El Ministerio prescinde de tus servicios.</p>
        <div class="fj-stats">
            <div class="fj-row"><span>Jornada en la que caíste</span><strong>${gameState.dia}/${TOTAL_DIAS}</strong></div>
            <div class="fj-row"><span>Score acumulado</span><strong>${gameState.scoreTotal}</strong></div>
            <div class="fj-row"><span>Alineación ministerial</span><strong>${gameState.alineacionMinisterial}%</strong></div>
        </div>
        <div class="rating-box">
            <div class="rating-icon">🚫</div>
            <div class="rating-title">DESPEDIDO</div>
            <div class="rating-desc">Tu ficha laboral queda manchada por orden del PSOE. Durante meses no te descuelgan ni para vigilar aparcamientos.</div>
            <div class="rating-quote">"Caso cerrado. Expediente 2026/PSOE/${gameState.dia}." — archivo central del Ministerio.</div>
        </div>
        <div class="fj-buttons">
            <button id="fj-reiniciar" class="btn-grande">VOLVER A INTENTARLO</button>
            <a href="../../index.html" class="btn-grande btn-secundario">VOLVER AL MENÚ</a>
        </div>
    `;
    modal.classList.add('active');
    audioSystem.stopMusic(250);
    audioSystem.playStingerDespido();
    audioSystem.playError();

    document.getElementById('fj-reiniciar').addEventListener('click', () => {
        deleteSave();
        location.reload();
    });

    if (typeof enviarPuntuacionAlRanking === 'function') {
        enviarPuntuacionAlRanking(gameState.scoreTotal);
    }
}
