// Boomermania - Game Loop e Inicialización

// Inicializar juego
function initGame() {
    // Inicializar sistema de escala de fuentes
    if (typeof fontScaleSystem !== 'undefined') {
        fontScaleSystem.init();
    }

    // Cargar preferencia de sonido desde metaprogresión
    if (typeof audioSystem !== 'undefined' && typeof cargarMetaprogresion === 'function') {
        const meta = cargarMetaprogresion();
        const sonidoActivo = meta.preferencias && meta.preferencias.sonido !== false;
        audioSystem.setMuted(!sonidoActivo);
    }

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

    if (loaded && gameState && gameState.juegoIniciado && !gameState.juegoTerminado) {
        // Continuar partida guardada
        console.log('Partida cargada, continuando...');
        startGame(true);
    } else {
        // Nueva partida - mostrar pantalla de inicio con selección de personaje
        showStartScreen();
        renderizarSeleccionPersonaje();
        actualizarEstadisticasInicio();
    }

    // Setup eventos
    setupEventListeners();

    // Setup auto-save
    setupVisibilityAutoSave();

    // Inicializar sistema de donaciones
    if (typeof DonationToast !== 'undefined') {
        DonationToast.init();
    }
}

// Renderizar selección de personaje en pantalla de inicio
function renderizarSeleccionPersonaje() {
    const container = document.getElementById('character-list');
    if (!container) return;

    const personajes = getPersonajes();
    const personajesDesbloqueados = getPersonajesDesbloqueados();
    const meta = cargarMetaprogresion();
    const seleccionadoId = meta.personajeSeleccionado || 'manolo';

    container.innerHTML = '';

    personajes.forEach(personaje => {
        const desbloqueado = personajesDesbloqueados.some(p => p.id === personaje.id);
        const seleccionado = personaje.id === seleccionadoId;

        const btn = document.createElement('button');
        btn.className = `character-option ${seleccionado ? 'selected' : ''} ${!desbloqueado ? 'locked' : ''}`;
        btn.textContent = personaje.icono;
        btn.title = desbloqueado ? personaje.nombre : '🔒 Bloqueado';

        if (desbloqueado) {
            btn.addEventListener('click', () => {
                seleccionarPersonaje(personaje.id);
                renderizarSeleccionPersonaje();
                actualizarInfoPersonaje(personaje);
            });
        }

        container.appendChild(btn);
    });

    // Actualizar info del personaje seleccionado
    const personajeActual = personajes.find(p => p.id === seleccionadoId) || personajes[0];
    actualizarInfoPersonaje(personajeActual);
}

// Actualizar info del personaje seleccionado
function actualizarInfoPersonaje(personaje) {
    const iconEl = document.getElementById('selected-char-icon');
    const nameEl = document.getElementById('selected-char-name');
    const descEl = document.getElementById('selected-char-desc');
    const bonusEl = document.getElementById('selected-char-bonus');

    if (iconEl) iconEl.textContent = personaje.icono;
    if (nameEl) nameEl.textContent = personaje.nombre;
    if (descEl) descEl.textContent = personaje.descripcion;
    if (bonusEl) bonusEl.textContent = personaje.bonusTexto || '';
}

// Actualizar estadísticas en pantalla de inicio
function actualizarEstadisticasInicio() {
    const progreso = typeof getProgresoLogros === 'function' ? getProgresoLogros() : { obtenidos: 0, total: 20 };
    const progressEl = document.getElementById('logros-progress');

    if (progressEl) {
        progressEl.textContent = `Logros: ${progreso.obtenidos}/${progreso.total}`;
    }
}

// Empezar el juego
function startGame(fromSave = false) {
    if (typeof audioSystem !== 'undefined') {
        audioSystem.resume();
        audioSystem.playClick();
    }

    if (!fromSave) {
        initGameState();
        gameState.juegoIniciado = true;
    }

    // Ocultar pantalla de inicio
    hideStartScreen();

    // Actualizar display
    updateDisplay();

    // Si es nueva partida, mostrar evento inicial
    if (!fromSave) {
        const evento = getEventoAleatorio(1975);
        if (evento) {
            setTimeout(() => {
                mostrarEvento(evento);
            }, 500);
        }
    }

    // Iniciar auto-guardado
    startAutoSave();

    // Calcular puntuación inicial
    calcularPuntuacion();
}

// Setup de event listeners
function setupEventListeners() {
    // Botón de inicio
    const startBtn = document.getElementById('start-btn');
    if (startBtn) {
        startBtn.addEventListener('click', () => startGame(false));
    }

    // Botón de avanzar década
    const advanceBtn = document.getElementById('advance-btn');
    if (advanceBtn) {
        advanceBtn.addEventListener('click', handleAdvanceDecade);
    }

    // Setup botones de recursos
    setupResourceButtons();

    // Setup navegación
    setupNavigation();
}

// Manejar avance de tiempo (año o década según el estado)
function handleAdvanceDecade() {
    if (!gameState) return;

    // Si ya terminó, mostrar resultados
    if (gameState.juegoTerminado) {
        mostrarFinJuego();
        return;
    }

    // Si es la última década y último año, terminar juego
    if (esUltimaDecada() && esUltimoAñoDecada()) {
        terminarJuego();
        return;
    }

    // Avanzar año (que puede disparar avance de década si es el último)
    if (avanzarAño()) {
        if (typeof audioSystem !== 'undefined') audioSystem.playAdvance();
        // Frase de transición según contexto
        if (gameState.añoIndex === 0) {
            // Acabamos de entrar en una nueva década
            mostrarFraseDecada();
        } else {
            // Solo avanzamos de año
            mostrarFraseAño();
        }

        // Guardar
        saveGame();
    }
}

// Mostrar frase al avanzar de año
function mostrarFraseAño() {
    const periodo = getPeriodoAñoActual();
    if (periodo && periodo.nombre) {
        // Mostrar brevemente el nombre del periodo
        const frase = periodo.nombre;
        mostrarFraseBoomer(frase);
    }
}

// Cuando el DOM esté listo
document.addEventListener('DOMContentLoaded', () => {
    console.log('Boomermania inicializando...');
    initGame();
});
