// La Paguita - Game Loop e Inicialización

let selectedPersonaje = 'mohamed';
let gameLoopInterval = null;
let lastGameTime = 0;

function initGame() {
    if (typeof fontScaleSystem !== 'undefined') {
        fontScaleSystem.init();
    }

    if (typeof audioSystem !== 'undefined') {
        audioSystem.setMuted(localStorage.getItem('lapaguitaPref_muted') === '1');
    }

    // Intentar cargar partida guardada
    const loaded = loadGame();

    if (loaded && gameState && gameState.juegoIniciado && !gameState.juegoTerminado) {
        console.log('Partida cargada, continuando...');
        startGame(true);
    } else {
        if (!isTestCompleted()) {
            showTestScreen();
        } else {
            showStartScreen();
            renderSeleccionPersonaje();
        }
    }

    setupEventListeners();
    setupVisibilityAutoSave();
}

function renderSeleccionPersonaje() {
    const container = document.getElementById('character-list');
    if (!container) return;

    const personajes = getPersonajes();
    const importados = personajes.filter(p => p.tipo === 'importado');
    const nativos = personajes.filter(p => p.tipo === 'nativo');

    container.innerHTML = '';

    // Importados
    const labelImp = document.createElement('div');
    labelImp.className = 'char-category-label';
    labelImp.textContent = '🌍 Importados';
    container.appendChild(labelImp);

    const rowImp = document.createElement('div');
    rowImp.className = 'char-category-row';
    importados.forEach(p => {
        rowImp.appendChild(crearBotonPersonaje(p));
    });
    container.appendChild(rowImp);

    // Nativos
    const labelNat = document.createElement('div');
    labelNat.className = 'char-category-label';
    labelNat.textContent = '🇪🇸 Buitres Nacionales';
    container.appendChild(labelNat);

    const rowNat = document.createElement('div');
    rowNat.className = 'char-category-row';
    nativos.forEach(p => {
        rowNat.appendChild(crearBotonPersonaje(p));
    });
    container.appendChild(rowNat);

    const personajeActual = personajes.find(p => p.id === selectedPersonaje) || personajes[0];
    updateCharacterInfo(personajeActual);
}

function crearBotonPersonaje(p) {
    const selected = p.id === selectedPersonaje;
    const btn = document.createElement('button');
    btn.className = `character-option ${selected ? 'selected' : ''} ${p.tipo === 'nativo' ? 'nativo' : ''}`;
    btn.innerHTML = `<span class="char-flag">${p.bandera}</span><span class="char-icon">${p.icono}</span>`;
    btn.title = `${p.nombre} - ${p.origen}`;
    btn.addEventListener('click', () => {
        selectedPersonaje = p.id;
        renderSeleccionPersonaje();
        updateCharacterInfo(p);
    });
    return btn;
}

function updateCharacterInfo(personaje) {
    const iconEl = document.getElementById('selected-char-icon');
    const nameEl = document.getElementById('selected-char-name');
    const originEl = document.getElementById('selected-char-origin');
    const descEl = document.getElementById('selected-char-desc');
    const bonusEl = document.getElementById('selected-char-bonus');
    const fraseEl = document.getElementById('selected-char-frase');
    const startBtn = document.getElementById('start-btn');
    const datosBtn = document.getElementById('btn-datos-reales');

    if (iconEl) iconEl.textContent = personaje.icono;
    if (nameEl) nameEl.textContent = personaje.nombre;
    if (originEl) originEl.textContent = personaje.bandera + ' ' + personaje.origen;
    if (descEl) descEl.textContent = personaje.descripcion;
    if (bonusEl) bonusEl.textContent = personaje.bonusTexto;
    if (fraseEl) fraseEl.textContent = `"${personaje.fraseLlegada}"`;

    // Adapt start button text
    if (startBtn) {
        const esNativo = esPersonajeNativo(personaje);
        if (esNativo) {
            startBtn.textContent = '🛋️ EMPEZAR A COBRAR';
        } else {
            const emoji = personaje.emojiLlegada || '🚤';
            startBtn.textContent = `${emoji} LLEGAR A ESPAÑA`;
        }
    }

    if (datosBtn) {
        const hayDatos = typeof getEstadisticasRealesById === 'function'
            && !!getEstadisticasRealesById(personaje.id);
        datosBtn.style.display = hayDatos ? '' : 'none';
    }
}

function startGame(fromSave = false) {
    if (!fromSave) {
        initGameState(selectedPersonaje);
        gameState.juegoIniciado = true;
    }

    hideStartScreen();

    // Adapt click button text for character type
    const personaje = getPersonajeActual();
    const clickBtn = document.getElementById('click-paguitas-btn');
    if (clickBtn && esPersonajeNativo(personaje)) {
        clickBtn.textContent = '🛋️ PEDIR PAGUITA';
    }

    updateDisplay();

    if (!fromSave) {
        // Show arrival phrase
        setTimeout(() => {
            mostrarFraseFase(gameState.faseActual);
        }, 500);

        // First event
        setTimeout(() => {
            const evento = getEventoAleatorio(gameState.faseActual);
            if (evento) mostrarEvento(evento);
        }, 3500);
    } else {
        // Show offline progress if any
        const offlineData = getOfflineProgress();
        if (offlineData) {
            setTimeout(() => _mostrarProgresoOffline(offlineData), 500);
        }
    }

    startAutoSave();
    calcularProduccion();
    
    // Start game loop with delta time
    lastGameTime = performance.now();
    if (gameLoopInterval) clearInterval(gameLoopInterval);
    gameLoopInterval = setInterval(handleGameTick, TICK_RATE_MS);
}

function setupEventListeners() {
    // Start button
    const startBtn = document.getElementById('start-btn');
    if (startBtn) {
        startBtn.addEventListener('click', () => startGame(false));
    }

    // Manual Paguita click button
    const clickBtn = document.getElementById('click-paguitas-btn');
    if (clickBtn) {
        clickBtn.addEventListener('click', handleClickManual);
    }

    // Advance Phase button
    const advancePhaseBtn = document.getElementById('advance-phase-btn');
    if (advancePhaseBtn) {
        advancePhaseBtn.addEventListener('click', handleAvanzarFase);
    }

    // Player icon click (Easter egg / Backup clicker)
    const playerIcon = document.getElementById('player-icon');
    if (playerIcon) {
        playerIcon.addEventListener('click', handleClickManual);
    }

    // Menu button
    const menuBtn = document.getElementById('menu-btn');
    if (menuBtn) {
        menuBtn.addEventListener('click', mostrarMenuPausa);
    }

    // Help button
    const helpBtn = document.getElementById('help-btn');
    if (helpBtn) {
        helpBtn.addEventListener('click', mostrarAyuda);
    }

    // Datos reales del arquetipo (en pantalla de selección)
    const datosBtn = document.getElementById('btn-datos-reales');
    if (datosBtn) {
        datosBtn.addEventListener('click', (e) => {
            e.preventDefault();
            if (typeof mostrarEstadisticasReales === 'function') {
                mostrarEstadisticasReales(selectedPersonaje);
            }
        });
    }

    // Resource bar tap-to-explain
    const resourcesBar = document.getElementById('resources-bar');
    if (resourcesBar) {
        resourcesBar.addEventListener('click', (e) => {
            const item = e.target.closest('.resource-item');
            if (!item) return;
            const label = item.querySelector('.resource-label');
            if (!label) return;

            item.classList.add('pulse');
            setTimeout(() => item.classList.remove('pulse'), 300);

            const explanations = {
                'Paguitas': '💶 Tu moneda. Consigue más reclamando ayudas o mendigando.',
                'Papeles': '📄 Documentos para avanzar de fase. Consíguelos con acciones y ayudas.',
                'Presupuesto 🇪🇸': '🇪🇸 El dinero de España. Cada ayuda lo drena. Si llega a 0%, ganas.',
                'Población': '👥 Inmigrantes traídos. Si superas a los españoles, ganas.'
            };

            const texto = explanations[label.textContent.trim()];
            if (texto) mostrarMiniNotificacion(texto, {});
        });
    }

    // Navigation
    setupNavigation();
}

let _displayTickCounter = 0;

function handleGameTick() {
    if (!gameState || gameState.juegoTerminado) {
        if (gameLoopInterval) clearInterval(gameLoopInterval);
        return;
    }

    // Calculate real delta time
    const now = performance.now();
    const deltaMs = now - lastGameTime;
    lastGameTime = now;

    const result = gameTick(deltaMs);

    _displayTickCounter++;

    switch (result) {
        case 'victoria':
            if (gameLoopInterval) clearInterval(gameLoopInterval);
            verificarLogros();
            saveGame();
            updateDisplay();
            setTimeout(() => mostrarFinJuego(), 500);
            break;

        case 'deportado':
            if (gameLoopInterval) clearInterval(gameLoopInterval);
            verificarLogros();
            saveGame();
            updateDisplay();
            setTimeout(() => mostrarFinJuego(), 500);
            break;

        case 'casi_deportado':
            updateDisplay();
            mostrarCasiDeportado();
            if (gameState.hints && !gameState.hints.primeraDerrota) {
                gameState.hints.primeraDerrota = true;
                setTimeout(() => mostrarHint('Te has librado de milagro. La próxima vez podrías no tener tanta suerte. ¡Baja la alerta!'), 5500);
            }
            break;

        case 'evento_aleatorio':
            const evento = getEventoOTrampa(gameState.faseActual);
            if (evento) mostrarEvento(evento);
            break;

        case 'trampa_auto':
            // Handled in gameTick, just update display
            updateDisplay();
            break;

        case 'inspeccion_afk':
            updateDisplay();
            if (typeof mostrarMiniNotificacion === 'function') {
                mostrarMiniNotificacion('🚨 ¡Inspección sorpresa! Te han pillado AFK y trincan un buen pellizco.', {});
            }
            break;

        case 'frase_jugador':
            mostrarFraseJugador();
            break;

        default: // 'ok' o false
            // Throttle display updates: header/resources every tick, 
            // heavy panels (ayudas/acciones) every 5th tick (~2fps)
            updateHeader();
            updateRecursos();
            updateAlerta();
            if (_displayTickCounter % 5 === 0) {
                updateActivePanel();
                updateTicker();
            }
            break;
    }
}

function handleClickManual() {
    if (!gameState || gameState.juegoTerminado) return;

    gameState.ultimaInteraccion = gameState.ticksTotales;

    // Add paguitas manually
    const personaje = getPersonajeActual();
    const paguitasGeneradas = CLICK_PAGUITAS_BASE * personaje.bonus.paguitas;

    gameState.paguitas += paguitasGeneradas;
    gameState.totalPaguitasGeneradas += paguitasGeneradas;

    // Haptic feedback on mobile
    if (navigator.vibrate) navigator.vibrate(10);

    if (typeof audioSystem !== 'undefined') audioSystem.playClick();

    // Floating number feedback
    const clickBtn = document.getElementById('click-paguitas-btn');
    if (clickBtn) {
        const floater = document.createElement('span');
        floater.className = 'click-floater';
        floater.textContent = `+${Math.floor(paguitasGeneradas)}💶`;
        clickBtn.appendChild(floater);
        setTimeout(() => floater.remove(), 800);
    }

    // Hint: primer click
    if (gameState.hints && !gameState.hints.primeraPaguita) {
        gameState.hints.primeraPaguita = true;
        setTimeout(() => mostrarHint('Compra Ayudas en la pestaña 🏢 para ganar paguitas automáticamente'), 500);
    }

    updateRecursos();
}

function handleAvanzarFase() {
    if (!gameState || gameState.juegoTerminado) return;

    gameState.ultimaInteraccion = gameState.ticksTotales;

    const result = avanzarFase();
    if (result === 'nueva_fase') {
        updateDisplay();
        celebrarFase();
        mostrarFraseFase(gameState.faseActual);

        if (typeof audioSystem !== 'undefined') audioSystem.playAdvance();

        // Hint: primer cambio de fase
        if (gameState.hints && !gameState.hints.primerCambioFase) {
            gameState.hints.primerCambioFase = true;
            setTimeout(() => mostrarHint('¡Nueva fase! Nuevas ayudas y acciones disponibles. Explora las pestañas.'), 3500);
        }

        // Evento de nueva fase
        setTimeout(() => {
            const evento = getEventoAleatorio(gameState.faseActual);
            if (evento) mostrarEvento(evento);
        }, 1000);

        verificarLogros();
        saveGame();
    }
}

function handleComprarAyuda(ayudaId) {
    const resultado = comprarAyuda(ayudaId);
    if (!resultado) return;

    updateDisplay();

    if (resultado.tipo === 'aprobado') {
        if (typeof audioSystem !== 'undefined') audioSystem.playBuy();
        // Flash effect on the card
        const card = document.querySelector(`[onclick="handleComprarAyuda('${ayudaId}')"]`);
        if (card) {
            card.closest('.ayuda-card')?.classList.add('flash');
            setTimeout(() => {
                card.closest('.ayuda-card')?.classList.remove('flash');
            }, 500);
        }

        const nombre = resultado.ayuda.nombre;
        mostrarMiniNotificacion(`✅ ${nombre} aprobada (Nv.${resultado.nivelNuevo})`, {
            paguitas: -resultado.coste.paguitas
        });

        // Hint: primera ayuda
        if (gameState.hints && !gameState.hints.primeraAyuda) {
            gameState.hints.primeraAyuda = true;
            setTimeout(() => mostrarHint('Las ayudas generan paguitas/s automáticamente. Pero drenan el presupuesto español. Ojo: no siempre te las aprueban.'), 600);
        }
    } else if (resultado.tipo === 'rechazado') {
        if (typeof audioSystem !== 'undefined') audioSystem.playError();
        const nombre = resultado.ayuda.nombre;
        const prob = Math.round(resultado.probAprobacion * 100);
        const waitSec = (resultado.cooldown / TICKS_POR_SEGUNDO).toFixed(0);
        mostrarMiniNotificacion(`❌ ${nombre} DENEGADA (${prob}% de éxito). Espera ${waitSec}s para reintentar.`, {
            paguitas: -resultado.coste.paguitas,
            papeles: -resultado.coste.papeles
        });
    }

    verificarLogros();
    saveGame();
}

function handleRenovarAyuda(ayudaId) {
    const r = renovarAyuda(ayudaId);
    if (!r) return;
    if (!r.ok) {
        if (r.motivo === 'sin_papeles') {
            mostrarMiniNotificacion(`❌ Faltan papeles para renovar (necesitas ${r.coste}📄).`, {});
        }
        return;
    }
    const ayuda = getAyudaById(ayudaId);
    mostrarMiniNotificacion(`🔄 ${ayuda ? ayuda.nombre : 'Ayuda'} renovada. Papeles al día.`, { papeles: -r.coste });
    updateDisplay();
    saveGame();
}

function handleEjecutarAccion(accionId) {
    const resultado = ejecutarAccion(accionId);
    if (!resultado) return;

    // Check if this is a minigame signal
    if (resultado.tipo === 'minijuego') {
        _handleMinijuegoAccion(resultado);
        return;
    }

    updateDisplay();

    // Show result as a mini-notification
    if (resultado.exito) {
        if (typeof audioSystem !== 'undefined') audioSystem.playBuy();
        mostrarMiniNotificacion(resultado.mensaje, resultado.efectos);
    } else {
        if (typeof audioSystem !== 'undefined') audioSystem.playError();
        mostrarMiniNotificacion('❌ ' + resultado.mensaje, resultado.efectos);
    }

    // Hint: primera acción
    if (gameState.hints && !gameState.hints.primeraAccion) {
        gameState.hints.primeraAccion = true;
        setTimeout(() => mostrarHint('Las acciones tienen cooldown y riesgo. Revisa los efectos antes de actuar.'), 800);
    }

    verificarLogros();
    saveGame();
}

function _handleMinijuegoAccion(resultado) {
    const { minijuego, penalidad, accionOriginal } = resultado;

    lanzarMinijuego(minijuego, resultado, (mgResult) => {
        if (!mgResult) {
            // Minigames disabled or not registered - apply default behavior
            if (penalidad) {
                gameState.paguitas = Math.max(0, gameState.paguitas + penalidad.paguitas);
                mostrarMiniNotificacion('❌ ' + penalidad.mensaje, { paguitas: penalidad.paguitas });
            }
            updateDisplay();
            verificarLogros();
            saveGame();
            return;
        }

        switch (minijuego) {
            case 'huye_policia':
                _resolverHuyePolicia(mgResult, penalidad);
                break;
            case 'top_manta':
                _resolverTopManta(mgResult, accionOriginal);
                break;
            case 'cola_extranjeria':
                _resolverColaExtranjeria(mgResult, accionOriginal);
                break;
            case 'carterista_metro':
                _resolverCarteristaMeto(mgResult);
                break;
            case 'drama_juzgado':
                _resolverDramaJuzgado(mgResult);
                break;
            case 'baja_medica':
                _resolverBajaMedica(mgResult);
                break;
            case 'trapicheo_mercadillo':
                _resolverTrapicheoMercadillo(mgResult);
                break;
            case 'tiktok_viral':
                _resolverTiktokViral(mgResult);
                break;
            case 'estafa_forocochero':
                _resolverEstafaForocochero(mgResult);
                break;
        }

        updateDisplay();
        verificarLogros();
        saveGame();
    });
}

function _resolverHuyePolicia(mgResult, penalidad) {
    if (!penalidad) return;

    switch (mgResult.nivel) {
        case 'escape':
            // Full escape + bonus
            gameState.paguitas += 5;
            mostrarMiniNotificacion('🏃 ¡Has escapado! +5💶 bonus', { paguitas: 5 });
            break;
        case 'partial':
            // Half penalty
            const halfPen = Math.floor(penalidad.paguitas / 2);
            gameState.paguitas = Math.max(0, gameState.paguitas + halfPen);
            mostrarMiniNotificacion('😰 Casi te pillan. ' + Math.abs(halfPen) + '💶 de multa', { paguitas: halfPen });
            break;
        case 'caught':
            // Full penalty
            gameState.paguitas = Math.max(0, gameState.paguitas + penalidad.paguitas);
            mostrarMiniNotificacion('🚔 ¡Pillado! ' + penalidad.mensaje, { paguitas: penalidad.paguitas });
            break;
    }
}

function _resolverTopManta(mgResult) {
    const earnings = mgResult.earnings || 0;
    const alertaExtra = mgResult.caught ? 5 : 0;

    gameState.paguitas += earnings;
    gameState.totalPaguitasGeneradas += earnings;
    gameState.alertaMediatica = Math.min(ALERTA_MAX, gameState.alertaMediatica + alertaExtra);

    if (mgResult.caught) {
        mostrarMiniNotificacion(`🚔 Pillado vendiendo. +${earnings}💶`, { paguitas: earnings, alerta: alertaExtra });
    } else if (mgResult.perfecto) {
        mostrarMiniNotificacion(`⭐ ¡Ronda perfecta! +${earnings}💶`, { paguitas: earnings });
    } else {
        mostrarMiniNotificacion(`👟 Top Manta: +${earnings}💶`, { paguitas: earnings });
    }
}

function _resolverColaExtranjeria(mgResult) {
    const papeles = mgResult.papeles || 0;
    gameState.papeles += papeles;

    if (papeles >= 4) {
        mostrarMiniNotificacion(`🎯 ¡Timing perfecto! +${papeles} papeles`, { papeles: papeles });
    } else if (papeles > 0) {
        mostrarMiniNotificacion(`📄 Cola completada. +${papeles} papeles`, { papeles: papeles });
    } else {
        mostrarMiniNotificacion('😴 Te has dormido en la cola. 0 papeles.', {});
    }
}

function _resolverCarteristaMeto(mgResult) {
    const earnings = mgResult.earnings || 0;
    const alertaExtra = mgResult.caught ? 5 : 0;

    gameState.paguitas += earnings;
    gameState.totalPaguitasGeneradas += earnings;
    gameState.alertaMediatica = Math.min(ALERTA_MAX, gameState.alertaMediatica + alertaExtra);

    if (mgResult.caught) {
        mostrarMiniNotificacion(`🚔 Te ha pillado la cámara. +${earnings}💶`, { paguitas: earnings, alerta: alertaExtra });
    } else if (mgResult.perfecto) {
        mostrarMiniNotificacion(`⭐ ¡Carterista de élite! +${earnings}💶`, { paguitas: earnings });
    } else {
        mostrarMiniNotificacion(`🚇 Carterista: +${earnings}💶`, { paguitas: earnings });
    }
}

function _resolverDramaJuzgado(mgResult) {
    const paguitas = mgResult.paguitas || 0;
    const papeles = mgResult.papeles || 0;

    gameState.paguitas += paguitas;
    gameState.totalPaguitasGeneradas += paguitas;
    gameState.papeles += papeles;

    if (mgResult.perfecto) {
        mostrarMiniNotificacion(`🏆 ¡Óscar al llanto! +${paguitas}💶 +${papeles}📄`, { paguitas, papeles });
    } else if (paguitas > 0) {
        mostrarMiniNotificacion(`😭 El juez se conmueve. +${paguitas}💶 +${papeles}📄`, { paguitas, papeles });
    } else {
        mostrarMiniNotificacion('😐 El juez no se lo cree. Nada.', {});
    }
}

function _resolverBajaMedica(mgResult) {
    const paguitas = mgResult.paguitas || 0;
    const papeles = mgResult.papeles || 0;

    gameState.paguitas += paguitas;
    gameState.totalPaguitasGeneradas += paguitas;
    gameState.papeles += papeles;

    if (mgResult.perfecto) {
        mostrarMiniNotificacion(`🤒 ¡Baja de 6 meses! +${paguitas}💶 +${papeles}📄`, { paguitas, papeles });
    } else if (mgResult.hits >= 3) {
        mostrarMiniNotificacion(`🩺 Baja de 2 semanas. +${paguitas}💶 +${papeles}📄`, { paguitas, papeles });
    } else {
        mostrarMiniNotificacion('👨‍⚕️ El médico sospecha...', { paguitas });
    }
}

function _resolverTrapicheoMercadillo(mgResult) {
    const earnings = mgResult.earnings || 0;
    const alertaExtra = mgResult.caught ? 5 : 0;

    gameState.paguitas += earnings;
    gameState.totalPaguitasGeneradas += earnings;
    gameState.alertaMediatica = Math.min(ALERTA_MAX, gameState.alertaMediatica + alertaExtra);

    if (mgResult.caught) {
        mostrarMiniNotificacion(`🚔 La Guardia Civil te ha pillado. +${earnings}💶`, { paguitas: earnings, alerta: alertaExtra });
    } else if (mgResult.perfecto) {
        mostrarMiniNotificacion(`⭐ ¡Príncipe del mercadillo! +${earnings}💶`, { paguitas: earnings });
    } else {
        mostrarMiniNotificacion(`🏪 Mercadillo: +${earnings}💶`, { paguitas: earnings });
    }
}

function _resolverEstafaForocochero(mgResult) {
    if (!mgResult) return;
    const personaje = getPersonajeActual();
    const bonusPaguitas = (personaje && personaje.bonus && personaje.bonus.paguitas) || 1;

    if (mgResult.exito) {
        const paguitas = Math.floor((mgResult.paguitas || 0) * bonusPaguitas);
        gameState.paguitas += paguitas;
        gameState.totalPaguitasGeneradas += paguitas;
        if (mgResult.perfecto) {
            mostrarMiniNotificacion(`💘 ¡Bizum express! +${paguitas}💶`, { paguitas });
        } else {
            mostrarMiniNotificacion(`📱 Estafa exitosa: +${paguitas}💶`, { paguitas });
        }
    } else if (mgResult.reportado) {
        const alerta = mgResult.alerta || 15;
        gameState.alertaMediatica = Math.min(ALERTA_MAX, gameState.alertaMediatica + alerta);
        gameState.maxAlertaAlcanzada = Math.max(gameState.maxAlertaAlcanzada, gameState.alertaMediatica);
        mostrarMiniNotificacion(`🚨 Te ha reportado en forocoches. +${alerta} alerta.`, { alerta });
    } else {
        const alerta = mgResult.alerta || 5;
        gameState.alertaMediatica = Math.min(ALERTA_MAX, gameState.alertaMediatica + alerta);
        mostrarMiniNotificacion('💔 No ha picado. Bloqueado.', {});
    }
}

function _resolverTiktokViral(mgResult) {
    const papeles = mgResult.papeles || 0;
    const alertaReduction = mgResult.alertaReduction || 0;

    gameState.papeles += papeles;
    gameState.alertaMediatica = Math.max(0, gameState.alertaMediatica + alertaReduction);

    if (mgResult.perfecto) {
        mostrarMiniNotificacion(`📱 ¡VIRAL! ${mgResult.followers} seguidores. +${papeles}📄`, { papeles, alerta: alertaReduction });
    } else if (mgResult.followers >= 20) {
        mostrarMiniNotificacion(`📱 ${mgResult.followers} seguidores.${papeles > 0 ? ' +' + papeles + '📄' : ''}`, { papeles, alerta: alertaReduction });
    } else {
        mostrarMiniNotificacion('📱 Nadie ha visto tu vídeo...', {});
    }
}

function _mostrarProgresoOffline(data) {
    const horas = Math.floor(data.elapsedSeconds / 3600);
    const minutos = Math.floor((data.elapsedSeconds % 3600) / 60);
    let tiempoTexto;
    if (horas > 0) {
        tiempoTexto = `${horas}h ${minutos}m`;
    } else {
        tiempoTexto = `${minutos} minutos`;
    }

    const msg = `Mientras dormías (${tiempoTexto}), las ayudas seguían llegando...`;
    const efectos = {};
    if (data.paguitas > 0) efectos.paguitas = data.paguitas;
    if (data.poblacion > 0) efectos.poblacion = data.poblacion;

    mostrarMiniNotificacion('💤 ' + msg, efectos);
}

// When DOM is ready
document.addEventListener('DOMContentLoaded', () => {
    console.log('La Paguita inicializando...');
    initGame();
});
