// Papeles Para Todos - Estación de inspección (pasaporte + ficha + expediente + botones sello)

let decisionEnCurso = false;
let inconsistenciaMarcadaActual = false;
let feedbackKeyListener = null;

function renderEstacion() {
    // Descanso de desayuno: si la posición actual está en los triggers y aún
    // no se ha mostrado ese descanso, lo interponemos antes del candidato.
    if (gameState && !gameState.juegoTerminado && Array.isArray(DESAYUNO_TRIGGERS)) {
        const triggerIdx = DESAYUNO_TRIGGERS.indexOf(gameState.candidatoIndex);
        if (triggerIdx !== -1 && (gameState.desayunosTomadosHoy || 0) <= triggerIdx) {
            mostrarDesayunoModal(triggerIdx + 1, () => {
                gameState.desayunosTomadosHoy = triggerIdx + 1;
                saveGame();
                renderEstacion();
            });
            return;
        }
    }

    // Recoger a Izan (13:55): un único interludio antes del último candidato.
    if (gameState && !gameState.juegoTerminado
        && typeof IZAN_TRIGGER === 'number'
        && gameState.candidatoIndex === IZAN_TRIGGER
        && !gameState.izanRecogidoHoy) {
        mostrarIzanModal(() => {
            gameState.izanRecogidoHoy = true;
            saveGame();
            renderEstacion();
        });
        return;
    }

    const candidato = getCandidatoActual();
    const container = document.getElementById('estacion');
    if (!container) return;

    // Resetear marcado al cambiar de candidato
    inconsistenciaMarcadaActual = false;

    if (!candidato) {
        container.innerHTML = '<div class="estacion-vacia">No hay más candidatos en la cola.</div>';
        return;
    }

    // Pasaporte + ficha
    const antecedentesHtml = candidato.antecedentes && candidato.antecedentes.length
        ? candidato.antecedentes.map(a => `<li>⚠ ${a}</li>`).join('')
        : '<li class="limpio">Sin antecedentes registrados</li>';

    const reclamadoHtml = candidato.reclamadoPor
        ? `<div class="ficha-reclamado">🚨 RECLAMADO POR: ${candidato.reclamadoPor}</div>`
        : '';

    const visadoTexto = candidato.visado ? '✅ VÁLIDO' : '❌ NO / IRREGULAR';
    const visadoClase = candidato.visado ? 'visado-ok' : 'visado-ko';

    const estrellas = '★'.repeat(candidato.peligrosidad) + '☆'.repeat(5 - candidato.peligrosidad);

    container.innerHTML = `
        <div class="docs-row">
            <div class="pasaporte">
                <div class="pasaporte-header">PASAPORTE</div>
                <div class="pasaporte-body">
                    <div class="pasaporte-foto">${candidato.foto}</div>
                    <div class="pasaporte-data">
                        <div class="pasaporte-campo"><span>NOMBRE</span><strong>${candidato.nombre}</strong></div>
                        <div class="pasaporte-campo"><span>ORIGEN</span><strong>${candidato.origen}</strong></div>
                        <div class="pasaporte-campo"><span>VISADO</span><strong class="${visadoClase}">${visadoTexto}</strong></div>
                        <div class="pasaporte-campo"><span>MOTIVO</span><strong>${candidato.motivo}</strong></div>
                    </div>
                </div>
            </div>

            <div class="ficha">
                <div class="ficha-header">FICHA POLICIAL</div>
                <div class="ficha-body">
                    ${reclamadoHtml}
                    <div class="ficha-section">
                        <div class="ficha-label">ANTECEDENTES</div>
                        <ul class="ficha-antecedentes">${antecedentesHtml}</ul>
                    </div>
                    <div class="ficha-section">
                        <div class="ficha-label">PELIGROSIDAD</div>
                        <div class="ficha-estrellas">${estrellas}</div>
                    </div>
                    <div class="ficha-flavor">"${candidato.flavor}"</div>
                </div>
            </div>
        </div>

        ${renderExpedienteAmpliado(candidato)}

        <div class="sello-buttons">
            <button id="btn-aprobar" class="sello-btn sello-btn--aprobar" aria-label="Aprobar solicitud">
                ✅ APROBAR
            </button>
            <button id="btn-rechazar" class="sello-btn sello-btn--rechazar" aria-label="Rechazar solicitud">
                ❌ RECHAZAR
            </button>
        </div>

        <div id="feedback" class="feedback"></div>
    `;

    document.getElementById('btn-aprobar').addEventListener('click', () => onDecision('APROBAR'));
    document.getElementById('btn-rechazar').addEventListener('click', () => onDecision('RECHAZAR'));

    const incBtn = document.getElementById('btn-inconsistencia');
    if (incBtn) {
        incBtn.addEventListener('click', () => {
            inconsistenciaMarcadaActual = !inconsistenciaMarcadaActual;
            incBtn.classList.toggle('active', inconsistenciaMarcadaActual);
            incBtn.textContent = inconsistenciaMarcadaActual
                ? '⚠ INCONSISTENCIA MARCADA (click para desmarcar)'
                : '⚠ MARCAR INCONSISTENCIA';
            if (typeof audioSystem !== 'undefined') audioSystem.playClick();
        });
    }
}

function renderExpedienteAmpliado(candidato) {
    const exp = candidato.expediente;

    // Bloque siempre mostrado: redes / historial / patrimonio / contactos / notas
    // Si no hay expediente, mostramos un bloque "sin información adicional".
    const rows = [];
    if (exp) {
        if (exp.redesSociales)    rows.push(renderExpRow('📱 Redes sociales', exp.redesSociales));
        if (exp.patrimonio)       rows.push(renderExpRow('💰 Patrimonio declarado', exp.patrimonio));
        if (exp.historial && exp.historial.length)
            rows.push(renderExpList('📜 Historial migratorio', exp.historial));
        if (exp.contactos && exp.contactos.length)
            rows.push(renderExpList('👥 Contactos conocidos', exp.contactos));
        if (exp.notasPoliciales)  rows.push(renderExpRow('🕵️ Notas CNI / Europol', exp.notasPoliciales));
        if (exp.declaracionSolicitante)
            rows.push(renderExpRow('💬 Declaración del solicitante', `"${exp.declaracionSolicitante}"`));
    }

    const contenido = rows.length
        ? rows.join('')
        : '<div class="exp-vacio">No hay información ampliada en este expediente.</div>';

    return `
        <details class="expediente-ampliado">
            <summary>📂 Abrir expediente completo</summary>
            <div class="expediente-content">
                ${contenido}
                <button id="btn-inconsistencia" class="btn-inconsistencia" aria-pressed="false">
                    ⚠ MARCAR INCONSISTENCIA
                </button>
                <div class="exp-hint">
                    Marca si detectas que los datos del pasaporte, la ficha o el expediente no encajan entre sí.
                    Acertar suma <strong>+${INCONSISTENCIA_BONUS}</strong> pts. Marcar sin razón resta <strong>${INCONSISTENCIA_PENAL}</strong> pts.
                </div>
            </div>
        </details>
    `;
}

function renderExpRow(label, value) {
    return `<div class="exp-row"><strong>${label}:</strong> ${value}</div>`;
}

function renderExpList(label, items) {
    const li = items.map(x => `<li>${x}</li>`).join('');
    return `<div class="exp-row"><strong>${label}:</strong><ul class="exp-list">${li}</ul></div>`;
}

function onDecision(decision) {
    if (decisionEnCurso) return;
    decisionEnCurso = true;

    const candidato = getCandidatoActual();
    if (!candidato) { decisionEnCurso = false; return; }

    const resultado = aplicarDecision(candidato, decision, {
        inconsistenciaMarcada: inconsistenciaMarcadaActual
    });

    // Feedback visual: sello cayendo sobre el pasaporte
    lanzarSello(decision);

    // Sonido
    if (decision === 'APROBAR') audioSystem.playSelloAprobar();
    else audioSystem.playSelloRechazar();

    // Texto de feedback (incluye botón "Continuar" para avance manual)
    mostrarFeedback(resultado, decision);

    updateDisplay();
    checkLogros();
    saveGame();

    // Deshabilitar los sellos mientras el jugador lee el feedback
    const btnA = document.getElementById('btn-aprobar');
    const btnR = document.getElementById('btn-rechazar');
    if (btnA) btnA.disabled = true;
    if (btnR) btnR.disabled = true;
}

function avanzarTrasFeedback() {
    if (feedbackKeyListener) {
        document.removeEventListener('keydown', feedbackKeyListener);
        feedbackKeyListener = null;
    }
    decisionEnCurso = false;

    if (gameState.strikes >= STRIKES_MAX) {
        terminarJuegoPorDespido();
        return;
    }

    avanzarCandidato();
    if (!quedanCandidatos()) {
        finalizarJornada();
    } else {
        renderEstacion();
    }
}

function lanzarSello(decision) {
    const estacion = document.getElementById('estacion');
    if (!estacion) return;
    const sello = document.createElement('div');
    sello.className = 'sello-animado ' + (decision === 'APROBAR' ? 'sello-aprobar' : 'sello-rechazar');
    sello.textContent = decision === 'APROBAR' ? 'APROBADO' : 'RECHAZADO';
    estacion.appendChild(sello);
    setTimeout(() => sello.remove(), 1200);
}

function mostrarFeedback(resultado, decision) {
    const el = document.getElementById('feedback');
    if (!el) return;
    const deltaSign = resultado.scoreDelta >= 0 ? '+' : '';
    const color = resultado.scoreDelta >= 0 ? 'good' : 'bad';

    let infraccionesHtml = '';
    if (resultado.infringidas.length) {
        infraccionesHtml = '<div class="feedback-infracciones">❌ ' +
            resultado.infringidas.map(r => r.descripcion).join('<br>❌ ') +
            '</div>';
    }

    let cumplidasHtml = '';
    if (resultado.cumplidas.length) {
        cumplidasHtml = '<div class="feedback-cumplidas">✓ ' +
            resultado.cumplidas.map(r => r.descripcion).join('<br>✓ ') +
            '</div>';
    }

    // Feedback de inconsistencia
    let inconsistenciaHtml = '';
    if (resultado.inconsistencia && resultado.inconsistencia.marcada) {
        if (resultado.inconsistencia.acertada) {
            inconsistenciaHtml = `<div class="feedback-cumplidas">🔍 Inconsistencia detectada correctamente (+${INCONSISTENCIA_BONUS})</div>`;
        } else {
            inconsistenciaHtml = `<div class="feedback-infracciones">🔍 No había inconsistencia real (${INCONSISTENCIA_PENAL})</div>`;
        }
    }

    let oficialHtml = '';
    if (resultado.oficial && resultado.oficial.acierto) {
        oficialHtml = '<div class="feedback-cumplidas">📋 Acierto en directriz oficial</div>';
    } else if (resultado.oficial && resultado.oficial.fallo) {
        oficialHtml = '<div class="feedback-infracciones">📋 Incumple la directriz oficial</div>';
    } else if (resultado.oficial) {
        oficialHtml = '<div class="feedback-neutral">📋 Neutral respecto a las directrices oficiales</div>';
    }

    const verbo = decision === 'APROBAR' ? 'Aprobado' : 'Rechazado';
    const esUltimo = gameState.strikes >= STRIKES_MAX || gameState.candidatoIndex >= CANDIDATOS_POR_DIA - 1;
    const ctaLabel = gameState.strikes >= STRIKES_MAX
        ? '▶ Ver despido (Enter)'
        : (esUltimo ? '▶ Terminar jornada (Enter)' : '▶ Siguiente candidato (Enter)');

    el.innerHTML = `
        <div class="feedback-score ${color}">${verbo} · ${deltaSign}${resultado.scoreDelta} pts</div>
        ${oficialHtml}
        ${cumplidasHtml}
        ${infraccionesHtml}
        ${inconsistenciaHtml}
        <button id="btn-feedback-continuar" class="feedback-continuar" type="button">${ctaLabel}</button>
    `;
    el.classList.add('visible');

    const btn = document.getElementById('btn-feedback-continuar');
    if (btn) {
        btn.addEventListener('click', avanzarTrasFeedback);
        btn.focus({ preventScroll: false });
        btn.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
    }

    feedbackKeyListener = (e) => {
        if (e.key === 'Enter' || e.key === ' ' || e.key === 'Spacebar') {
            e.preventDefault();
            avanzarTrasFeedback();
        }
    };
    document.addEventListener('keydown', feedbackKeyListener);
}
