// Boomermania - Sistema de Metaprogresión (Progreso Permanente)

const META_SAVE_KEY = 'boomermania_meta';
const META_VERSION = 1;

// Estructura de metaprogresión
function getMetaprogresionInicial() {
    return {
        version: META_VERSION,
        logros: [],
        desbloqueos: [],
        personajeSeleccionado: 'manolo',
        modoSeleccionado: 'normal',
        estadisticas: {
            partidasJugadas: 0,
            partidasGanadas: 0,
            mejorPuntuacion: 0,
            totalPuntos: 0,
            totalPisos: 0,
            totalDineroGanado: 0
        },
        preferencias: {
            sonido: true,
            tutorialVisto: false
        }
    };
}

// Cargar metaprogresión desde localStorage
function cargarMetaprogresion() {
    try {
        const savedData = localStorage.getItem(META_SAVE_KEY);
        if (!savedData) return getMetaprogresionInicial();

        const data = JSON.parse(savedData);

        // Verificar versión y migrar si es necesario
        if (data.version !== META_VERSION) {
            return migrarMetaprogresion(data);
        }

        return data;
    } catch (e) {
        console.error('Error cargando metaprogresión:', e);
        return getMetaprogresionInicial();
    }
}

// Guardar metaprogresión
function guardarMetaprogresionData(data) {
    try {
        data.version = META_VERSION;
        localStorage.setItem(META_SAVE_KEY, JSON.stringify(data));
        return true;
    } catch (e) {
        console.error('Error guardando metaprogresión:', e);
        return false;
    }
}

// Guardar metaprogresión actual (después de una partida)
function guardarMetaprogresion() {
    if (!gameState) return;

    const meta = cargarMetaprogresion();

    // Actualizar estadísticas
    meta.estadisticas.partidasJugadas++;

    if (gameState.juegoTerminado) {
        meta.estadisticas.partidasGanadas++;

        if (gameState.puntuacionTotal > meta.estadisticas.mejorPuntuacion) {
            meta.estadisticas.mejorPuntuacion = gameState.puntuacionTotal;
        }

        meta.estadisticas.totalPuntos += gameState.puntuacionTotal;
        meta.estadisticas.totalPisos += gameState.stats.pisosComprados;
        meta.estadisticas.totalDineroGanado += gameState.stats.dineroMaximo;
    }

    guardarMetaprogresionData(meta);
}

// Migrar datos de versiones anteriores
function migrarMetaprogresion(oldData) {
    const newData = getMetaprogresionInicial();

    // Copiar datos que existan
    if (oldData.logros) newData.logros = oldData.logros;
    if (oldData.desbloqueos) newData.desbloqueos = oldData.desbloqueos;
    if (oldData.estadisticas) {
        newData.estadisticas = { ...newData.estadisticas, ...oldData.estadisticas };
    }

    // Guardar versión migrada
    guardarMetaprogresionData(newData);

    return newData;
}

// Seleccionar personaje
function seleccionarPersonaje(personajeId) {
    if (!isPersonajeDesbloqueado(personajeId)) return false;

    const meta = cargarMetaprogresion();
    meta.personajeSeleccionado = personajeId;
    guardarMetaprogresionData(meta);

    return true;
}

// Seleccionar modo de dificultad
function seleccionarModo(modoId) {
    const modo = modosData[modoId];
    if (!modo) return false;

    // Verificar si está desbloqueado
    if (!modo.desbloqueado) {
        const logrosObtenidos = getLogrosObtenidos();
        if (!modo.requiereLogro || !logrosObtenidos.includes(modo.requiereLogro)) {
            return false;
        }
    }

    const meta = cargarMetaprogresion();
    meta.modoSeleccionado = modoId;
    guardarMetaprogresionData(meta);

    return true;
}

// Obtener personaje seleccionado
function getPersonajeSeleccionado() {
    const meta = cargarMetaprogresion();
    return getPersonaje(meta.personajeSeleccionado);
}

// Obtener modo seleccionado
function getModoSeleccionado() {
    const meta = cargarMetaprogresion();
    return modosData[meta.modoSeleccionado] || modosData.normal;
}

// Obtener estadísticas globales
function getEstadisticasGlobales() {
    const meta = cargarMetaprogresion();
    return meta.estadisticas;
}

// Resetear metaprogresión (para debugging)
function resetearMetaprogresion() {
    localStorage.removeItem(META_SAVE_KEY);
    return getMetaprogresionInicial();
}

// Verificar si hay metaprogresión guardada
function hayMetaprogresion() {
    return localStorage.getItem(META_SAVE_KEY) !== null;
}

// Exportar datos de metaprogresión (para backup)
function exportarMetaprogresion() {
    const meta = cargarMetaprogresion();
    return JSON.stringify(meta, null, 2);
}

// Importar datos de metaprogresión (desde backup)
function importarMetaprogresion(jsonString) {
    try {
        const data = JSON.parse(jsonString);
        if (data.version && data.logros) {
            guardarMetaprogresionData(data);
            return true;
        }
        return false;
    } catch (e) {
        console.error('Error importando metaprogresión:', e);
        return false;
    }
}
