// Boomermania - Sistema de Recursos

// Obtener texto de valor para un recurso del jugador
function getTextoRecurso(recursoId) {
    if (!gameState) return '';

    const valor = gameState.playerResources[recursoId];
    const recurso = recursosData[recursoId];

    if (!recurso) return valor.toString();

    // Si tiene niveles, mostrar texto del nivel
    if (recurso.niveles) {
        const nivel = recurso.niveles.find(n => n.valor === valor);
        return nivel ? nivel.texto : valor.toString();
    }

    // Si tiene unidad, mostrar con unidad
    if (recurso.unidad) {
        return `${valor} ${recurso.unidad}`;
    }

    return valor.toString();
}

// Obtener clase CSS para un recurso según su valor
function getClaseRecurso(recursoId) {
    if (!gameState) return '';

    const valor = gameState.playerResources[recursoId];
    const recurso = recursosData[recursoId];

    if (!recurso) return '';

    // Para recursos con niveles
    if (recurso.niveles) {
        if (valor >= 3) return 'high';
        if (valor >= 1) return 'medium';
        return 'low';
    }

    // Para vivienda
    if (recursoId === 'vivienda') {
        if (valor >= 3) return 'high';
        if (valor >= 1) return 'medium';
        return 'low';
    }

    // Para pensión
    if (recursoId === 'pension') {
        if (valor >= 60) return 'high';
        if (valor >= 30) return 'medium';
        return 'low';
    }

    // Para ambiente (inverso)
    if (recursoId === 'ambiente') {
        if (valor <= 50) return 'high'; // Has contaminado mucho = bien para ti
        if (valor <= 80) return 'medium';
        return 'low';
    }

    return '';
}

// Obtener texto para recursos globales
function getTextoRecursoGlobal(recursoId) {
    if (!gameState) return '100%';
    const valor = gameState.recursosGlobales[recursoId];
    return `${Math.round(valor)}%`;
}

// Obtener clase CSS para recursos globales (desde perspectiva de generaciones futuras)
function getClaseRecursoGlobal(recursoId) {
    if (!gameState) return 'good';

    const valor = gameState.recursosGlobales[recursoId];

    if (valor >= 70) return 'good';
    if (valor >= 40) return 'warn';
    return 'bad';
}

// Verificar si una mejora está disponible
function isMejoraDisponible(mejoraId) {
    if (!gameState) return false;
    if (typeof mejorasData === 'undefined') return false;

    const mejora = mejorasData[mejoraId];
    if (!mejora) return false;

    const decada = getAnoActual();

    // Verificar década
    if (mejora.disponibleDesde && decada < mejora.disponibleDesde) return false;
    if (mejora.disponibleHasta && decada > mejora.disponibleHasta) return false;

    // Verificar si ya se usó
    if (!mejora.repeatable && gameState.mejorasUsadas.includes(mejoraId)) return false;

    // Verificar requisitos
    if (mejora.requisitos) {
        for (const [recurso, req] of Object.entries(mejora.requisitos)) {
            const valorActual = gameState.playerResources[recurso] || 0;
            if (typeof req === 'number') {
                if (valorActual < req) return false;
            } else if (typeof req === 'object') {
                if (req.min !== undefined && valorActual < req.min) return false;
                if (req.max !== undefined && valorActual > req.max) return false;
            }
        }
    }

    return true;
}

// Obtener resumen de recursos para estadísticas
function getResumenRecursos() {
    if (!gameState) return {};

    return {
        player: {
            pisos: gameState.playerResources.vivienda,
            empleo: getTextoRecurso('empleo'),
            pension: `${gameState.playerResources.pension}%`,
            contribucionAmbiental: `${100 - gameState.playerResources.ambiente}% daño`,
            nivelEducacion: getTextoRecurso('educacion')
        },
        global: {
            viviendaDisponible: `${Math.round(gameState.recursosGlobales.viviendaDisponible)}%`,
            empleoEstable: `${Math.round(gameState.recursosGlobales.empleoEstable)}%`,
            huchaPensiones: `${Math.round(gameState.recursosGlobales.huchaPensiones)}%`,
            saludPlaneta: `${Math.round(gameState.recursosGlobales.saludPlaneta)}%`,
            educacionAccesible: `${Math.round(gameState.recursosGlobales.educacionAccesible)}%`
        }
    };
}

// Obtener razón por la que una mejora no está disponible (para feedback al usuario)
function getRazonNoDisponible(mejoraId) {
    if (!gameState) return 'Juego no iniciado';
    if (typeof mejorasData === 'undefined') return 'Acción no disponible';

    const mejora = mejorasData[mejoraId];
    if (!mejora) return 'Acción no disponible';

    const decada = getAnoActual();

    // Verificar década
    if (mejora.disponibleDesde && decada < mejora.disponibleDesde) {
        return `Disponible desde ${mejora.disponibleDesde}`;
    }
    if (mejora.disponibleHasta && decada > mejora.disponibleHasta) {
        return 'Ya pasó su momento...';
    }

    // Verificar si ya se usó
    if (!mejora.repeatable && gameState.mejorasUsadas.includes(mejoraId)) {
        return 'Ya lo hiciste';
    }

    // Verificar dinero
    if (mejora.coste?.dinero) {
        const coste = typeof calcularCosteMejora === 'function'
            ? calcularCosteMejora(mejoraId)
            : mejora.coste.dinero;
        if (gameState.playerResources.dinero < coste) {
            const costeFormateado = typeof formatearDinero === 'function'
                ? formatearDinero(coste)
                : coste.toLocaleString('es-ES');
            return `Necesitas ${costeFormateado}`;
        }
    }

    // Verificar requisitos
    if (mejora.requisitos) {
        for (const [recurso, req] of Object.entries(mejora.requisitos)) {
            const valor = gameState.playerResources[recurso] || 0;
            const nombreRecurso = getNombreRecursoAmigable(recurso);

            if (typeof req === 'number') {
                if (valor < req) return `Necesitas más ${nombreRecurso}`;
            } else if (typeof req === 'object') {
                if (req.min !== undefined && valor < req.min) {
                    return `Necesitas más ${nombreRecurso}`;
                }
                if (req.max !== undefined && valor > req.max) {
                    return `Tu ${nombreRecurso} es demasiado alto`;
                }
            }
        }
    }

    return 'No disponible ahora';
}

// Obtener nombre amigable de un recurso para mensajes
function getNombreRecursoAmigable(recursoId) {
    const nombres = {
        'vivienda': 'pisos',
        'empleo': 'nivel de empleo',
        'pension': 'cotización',
        'ambiente': 'consciencia ambiental',
        'educacion': 'nivel educativo',
        'dinero': 'dinero'
    };
    return nombres[recursoId] || recursoId;
}
