// La Paguita - Minigame Manager

let _minigameActive = false;
let _minigameCallback = null;

const MINIGAME_REGISTRY = {
    huye_policia: { init: null, nombre: '🚔 Huye de la Policía' },
    top_manta: { init: null, nombre: '👟 Top Manta Sprint' },
    cola_extranjeria: { init: null, nombre: '🏛️ Cola de Extranjería' },
    carterista_metro: { init: null, nombre: '🚇 Carterista Express' },
    drama_juzgado: { init: null, nombre: '😭 Drama en el Juzgado' },
    baja_medica: { init: null, nombre: '🤒 Baja Médica' },
    trapicheo_mercadillo: { init: null, nombre: '🏪 Mercadillo' },
    tiktok_viral: { init: null, nombre: '📱 TikTok Viral' },
    estafa_forocochero: { init: null, nombre: '📱 Estafa al Forocochero' }
};

function registrarMinijuego(tipo, initFn) {
    if (MINIGAME_REGISTRY[tipo]) {
        MINIGAME_REGISTRY[tipo].init = initFn;
    }
}

function lanzarMinijuego(tipo, contexto, onComplete) {
    if (_minigameActive) return;
    if (!gameState || !gameState.minijuegosActivos) {
        if (onComplete) onComplete(null);
        return;
    }

    const entry = MINIGAME_REGISTRY[tipo];
    if (!entry || !entry.init) {
        console.warn('Minijuego no registrado:', tipo);
        if (onComplete) onComplete(null);
        return;
    }

    _minigameActive = true;
    _minigameCallback = onComplete;

    // Pause game loop
    if (gameLoopInterval) {
        clearInterval(gameLoopInterval);
        gameLoopInterval = null;
    }

    // Show modal
    const modal = document.getElementById('minigame-modal');
    const titulo = document.getElementById('minigame-titulo');
    const area = document.getElementById('minigame-area');
    const timer = document.getElementById('minigame-timer');
    const score = document.getElementById('minigame-score');

    if (titulo) titulo.textContent = entry.nombre;
    if (area) area.innerHTML = '';
    if (timer) timer.textContent = '';
    if (score) score.textContent = '';
    if (modal) modal.classList.add('show');

    // Launch minigame
    entry.init(area, contexto, finalizarMinijuego);
}

function finalizarMinijuego(resultado) {
    if (!_minigameActive) return;
    _minigameActive = false;

    // Hide modal
    const modal = document.getElementById('minigame-modal');
    if (modal) modal.classList.remove('show');

    // Track stats
    if (gameState && gameState.stats && gameState.stats.minijuegos) {
        gameState.stats.minijuegos.total++;
        if (resultado && resultado.tipo) {
            if (!gameState.stats.minijuegos[resultado.tipo]) {
                gameState.stats.minijuegos[resultado.tipo] = { jugados: 0, perfectos: 0 };
            }
            gameState.stats.minijuegos[resultado.tipo].jugados++;
            if (resultado.perfecto) {
                gameState.stats.minijuegos[resultado.tipo].perfectos++;
            }
            // Track max earnings/followers for achievements
            if (resultado.tipo === 'top_manta' && resultado.earnings) {
                const prev = gameState.stats.minijuegos._topMantaMaxEarnings || 0;
                gameState.stats.minijuegos._topMantaMaxEarnings = Math.max(prev, resultado.earnings);
            }
            if (resultado.tipo === 'carterista_metro' && resultado.earnings) {
                const prev = gameState.stats.minijuegos._carteristaMaxEarnings || 0;
                gameState.stats.minijuegos._carteristaMaxEarnings = Math.max(prev, resultado.earnings);
            }
            if (resultado.tipo === 'trapicheo_mercadillo' && resultado.earnings) {
                const prev = gameState.stats.minijuegos._mercadilloMaxEarnings || 0;
                gameState.stats.minijuegos._mercadilloMaxEarnings = Math.max(prev, resultado.earnings);
            }
            if (resultado.tipo === 'tiktok_viral' && resultado.followers) {
                const prev = gameState.stats.minijuegos._tiktokMaxFollowers || 0;
                gameState.stats.minijuegos._tiktokMaxFollowers = Math.max(prev, resultado.followers);
            }
        }
    }

    // Resume game loop
    lastGameTime = performance.now();
    gameLoopInterval = setInterval(handleGameTick, TICK_RATE_MS);

    // Callback to caller
    if (_minigameCallback) {
        _minigameCallback(resultado);
        _minigameCallback = null;
    }
}

function isMinigameActive() {
    return _minigameActive;
}

function updateMinigameTimer(secondsLeft) {
    const timer = document.getElementById('minigame-timer');
    if (timer) {
        timer.textContent = Math.ceil(secondsLeft) + 's';
        timer.classList.toggle('warning', secondsLeft <= 3);
    }
}

function updateMinigameScore(text) {
    const score = document.getElementById('minigame-score');
    if (score) score.textContent = text;
}
