// Boomermania - Sistema de Tiempo (Décadas y Años)

// Avanzar al siguiente año dentro de la década
function avanzarAño() {
    if (!gameState || gameState.juegoTerminado) return false;

    const decada = getDecadaActual();
    if (!decada) return false;

    // Procesar ingresos del año (si existe el sistema de economía)
    if (typeof procesarIngresosAño === 'function') {
        procesarIngresosAño();
    }

    // Verificar si hay más años en la década
    const maxAños = ESTRUCTURA_TEMPORAL.añosPorDecada;
    if (gameState.añoIndex >= maxAños - 1) {
        // Fin de la década, necesita avanzar década
        return avanzarDecada();
    }

    // Avanzar año dentro de la década
    gameState.añoIndex++;
    gameState.accionesAño = 0;
    gameState.stats.añosJugados++;

    // Disparar evento del nuevo año
    onNuevoAño();

    return true;
}

// Avanzar a la siguiente década
function avanzarDecada() {
    if (!gameState || gameState.juegoTerminado) return false;

    // Verificar si hay más décadas
    if (gameState.decadaIndex >= DECADAS.length - 1) {
        // Fin del juego
        terminarJuego();
        return false;
    }

    // Mostrar pantalla de mantenimiento antes de avanzar (si existe)
    if (typeof mostrarMantenimiento === 'function') {
        // El mantenimiento llamará a finalizarAvanceDecada() cuando termine
        mostrarMantenimiento();
        return true;
    }

    // Si no hay sistema de mantenimiento, avanzar directamente
    return finalizarAvanceDecada();
}

// Finalizar el avance de década (llamado después del mantenimiento)
function finalizarAvanceDecada() {
    if (!gameState) return false;

    // Avanzar índice de década
    gameState.decadaIndex++;
    gameState.stats.decadasCompletadas++;

    // Resetear años y acciones
    gameState.añoIndex = 0;
    gameState.accionesAño = 0;

    // Procesar cambio de década (inflación, etc.)
    if (typeof procesarCambioDecada === 'function') {
        procesarCambioDecada();
    }

    // Disparar evento de nueva década
    const nuevaDecada = getDecadaActual();
    if (nuevaDecada) {
        onNuevaDecada(nuevaDecada);
    }

    return true;
}

// Callback cuando empieza un nuevo año
function onNuevoAño() {
    const periodo = getPeriodoAñoActual();
    if (!periodo) return;

    // Mostrar evento aleatorio del año
    const evento = getEventoAleatorioAño(getAnoActual());
    if (evento && !gameState.eventosVistos.includes(evento.id)) {
        gameState.eventosVistos.push(evento.id);
        mostrarEvento(evento);
    } else {
        // Si no hay evento, solo actualizar UI
        updateDisplay();
    }

    updateGenerationsDisplay();
}

// Callback cuando empieza una nueva década
function onNuevaDecada(decada) {
    // Mostrar evento principal de la década
    const evento = getEventoAleatorio(decada.year);
    if (evento && !gameState.eventosVistos.includes(evento.id)) {
        gameState.eventosVistos.push(evento.id);
        mostrarEvento(evento);
    }

    // Actualizar UI
    updateDisplay();
    updateGenerationsDisplay();
}

// Terminar el juego
function terminarJuego() {
    if (!gameState) return;

    gameState.juegoTerminado = true;
    calcularPuntuacion();

    // Verificar logros (si existe el sistema)
    if (typeof verificarLogrosFinales === 'function') {
        verificarLogrosFinales();
    }

    // Mostrar pantalla de fin
    mostrarFinJuego();
}

// Obtener progreso del año actual (para barra de progreso)
function getProgresoAño() {
    if (!gameState) return 0;
    return (gameState.accionesAño / gameState.maxAccionesPorAño) * 100;
}

// Obtener progreso de la década completa
function getProgresoDecada() {
    if (!gameState) return 0;
    const añosCompletados = gameState.añoIndex;
    const progresoAño = gameState.accionesAño / gameState.maxAccionesPorAño;
    const totalAños = ESTRUCTURA_TEMPORAL.añosPorDecada;
    return ((añosCompletados + progresoAño) / totalAños) * 100;
}

// Obtener nombre de la década actual
function getNombreDecada() {
    const decada = getDecadaActual();
    return decada ? decada.name : 'Fin';
}

// Verificar si se puede avanzar de año
function puedeAvanzarAño() {
    if (!gameState || gameState.juegoTerminado) return false;
    // Puede avanzar si ha hecho al menos 1 acción o está en el primer año
    return gameState.accionesAño > 0 || (gameState.añoIndex === 0 && gameState.decadaIndex === 0);
}

// Verificar si es el último año de la década
function esUltimoAñoDecada() {
    if (!gameState) return false;
    return gameState.añoIndex >= ESTRUCTURA_TEMPORAL.añosPorDecada - 1;
}

// Verificar si es la última década
function esUltimaDecada() {
    if (!gameState) return false;
    return gameState.decadaIndex >= DECADAS.length - 1;
}

// Obtener años restantes en la década
function getAñosRestantesDecada() {
    if (!gameState) return 0;
    return ESTRUCTURA_TEMPORAL.añosPorDecada - gameState.añoIndex - 1;
}

// Obtener décadas restantes
function getDecadasRestantes() {
    if (!gameState) return 0;
    return DECADAS.length - gameState.decadaIndex - 1;
}

// Helper para obtener evento aleatorio por año
function getEventoAleatorioAño(año) {
    // Los eventos están organizados por década, buscar en la década correspondiente
    const decadaYear = Math.floor(año / 10) * 10 + 5; // 1975, 1985, etc.
    return getEventoAleatorio(decadaYear);
}
