// Papeles Para Todos - Estado del juego

let gameState = null;

// Shuffle Fisher-Yates con Math.random (no determinista — se persiste el orden resultante)
function shuffleArrayRandom(arr) {
    const copy = arr.slice();
    for (let i = copy.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [copy[i], copy[j]] = [copy[j], copy[i]];
    }
    return copy;
}

function initGameState() {
    gameState = {
        // Progreso temporal
        dia: 1,
        candidatoIndex: 0,                // Índice dentro de la pila del día
        pilaDia: [],                      // IDs de candidatos del día actual

        // Orden global único por partida — evita repeticiones entre días.
        // Se mezcla aleatoriamente al iniciar partida con todos los IDs del pool.
        ordenCandidatos: shuffleArrayRandom(candidatosData.map(c => c.id)),

        // Puntuaciones
        scoreTotal: 0,
        scoreDia: 0,
        strikes: 0,
        alineacionMinisterial: 50,        // 0-100

        // Contadores del día
        aprobadosDia: 0,
        rechazadosDia: 0,
        desayunosTomadosHoy: 0,
        fichajeHechoHoy: false,
        izanRecogidoHoy: false,

        // Stats acumuladas
        stats: {
            yihadistasAprobados: 0,
            mafiososAprobados: 0,
            humanitariosAprobados: 0,
            europeosRechazados: 0,
            latinosRechazados: 0,
            citasRevendidasAprobadas: 0,
            menasRechazados: 0,
            oligarcasAprobados: 0,
            vipsRechazados: 0,
            espanolRechazado: false,
            origenesAprobados: [],
            decisionesDiaActual: { aciertosOficiales: 0, fallosOficiales: 0, neutras: 0 },
            diaPerfectoConseguido: false,
            inconsistenciasDetectadas: 0,
            inconsistenciasFalsas: 0,
            decisionesCorrectas: 0,
            decisionesIncorrectas: 0,
            decisionesNeutras: 0,
            totalDecisiones: 0,
            jornadasSinFalloOficial: 0
        },

        // Eventos especiales vistos (para no repetirlos)
        eventosVistos: [],

        // Estado del juego
        juegoIniciado: false,
        juegoTerminado: false,
        razonFin: null,                   // 'despido' | 'completado'
        runStartedAt: Date.now()
    };

    return gameState;
}

// Aplicar efectos genéricos (usado por eventos entre días en fases futuras)
function aplicarEfectos(efectos) {
    if (!efectos || !gameState) return;

    if (typeof efectos.scoreTotal === 'number') gameState.scoreTotal += efectos.scoreTotal;
    if (typeof efectos.alineacionMinisterial === 'number') {
        gameState.alineacionMinisterial = Math.max(0, Math.min(100, gameState.alineacionMinisterial + efectos.alineacionMinisterial));
    }
    if (typeof efectos.strikes === 'number') gameState.strikes += efectos.strikes;
}

function isJuegoTerminado() {
    return gameState && gameState.juegoTerminado;
}
