// Papeles Para Todos - Persistencia (localStorage)

function saveGame() {
    if (!gameState) return false;
    try {
        const saveData = {
            version: SAVE_VERSION,
            timestamp: Date.now(),
            state: gameState
        };
        localStorage.setItem(SAVE_KEY, JSON.stringify(saveData));
        showSaveIndicator();
        return true;
    } catch (e) {
        console.error('Error guardando partida:', e);
        return false;
    }
}

function loadGame() {
    try {
        const savedData = localStorage.getItem(SAVE_KEY);
        if (!savedData) return false;

        const data = JSON.parse(savedData);
        if (data.version !== SAVE_VERSION) {
            console.warn('Versión de guardado diferente, iniciando nueva partida');
            return false;
        }

        gameState = JSON.parse(JSON.stringify(data.state));
        // Campos añadidos en versiones menores sin bump de SAVE_VERSION
        if (typeof gameState.desayunosTomadosHoy !== 'number') gameState.desayunosTomadosHoy = 0;
        if (typeof gameState.fichajeHechoHoy !== 'boolean') {
            // Saves antiguos: damos el fichaje por hecho para no repetirlo en medio de la jornada.
            gameState.fichajeHechoHoy = gameState.candidatoIndex > 0;
        }
        if (typeof gameState.izanRecogidoHoy !== 'boolean') {
            // Saves antiguos más allá del trigger de Izan: lo damos por recogido.
            gameState.izanRecogidoHoy = gameState.candidatoIndex > (typeof IZAN_TRIGGER === 'number' ? IZAN_TRIGGER : 9);
        }
        if (gameState.stats && typeof gameState.stats.jornadasSinFalloOficial !== 'number') {
            gameState.stats.jornadasSinFalloOficial = gameState.stats.jornadasCupoCumplido || 0;
        }
        return !!(gameState && Array.isArray(gameState.pilaDia));
    } catch (e) {
        console.error('Error cargando partida:', e);
        return false;
    }
}

function hasSavedGame() {
    try {
        const savedData = localStorage.getItem(SAVE_KEY);
        if (!savedData) return false;
        const data = JSON.parse(savedData);
        return data.version === SAVE_VERSION && data.state && !data.state.juegoTerminado;
    } catch (e) {
        return false;
    }
}

function deleteSave() {
    try {
        localStorage.removeItem(SAVE_KEY);
        return true;
    } catch (e) {
        return false;
    }
}

function showSaveIndicator() {
    const indicator = document.getElementById('save-indicator');
    if (!indicator) return;
    indicator.classList.add('show');
    setTimeout(() => indicator.classList.remove('show'), 1500);
}

let autoSaveInterval = null;
function startAutoSave() {
    if (autoSaveInterval) clearInterval(autoSaveInterval);
    autoSaveInterval = setInterval(() => {
        if (gameState && gameState.juegoIniciado && !gameState.juegoTerminado) saveGame();
    }, AUTO_SAVE_INTERVAL);
}

function saveAudioPrefs(prefs) {
    try {
        localStorage.setItem(AUDIO_PREFS_KEY, JSON.stringify(prefs));
        return true;
    } catch (e) {
        return false;
    }
}

function loadAudioPrefs() {
    try {
        const raw = localStorage.getItem(AUDIO_PREFS_KEY);
        if (!raw) return null;
        const parsed = JSON.parse(raw);
        if (!parsed || typeof parsed !== 'object') return null;
        return parsed;
    } catch (e) {
        return null;
    }
}

function setupVisibilityAutoSave() {
    document.addEventListener('visibilitychange', () => {
        if (document.hidden && gameState && gameState.juegoIniciado && !gameState.juegoTerminado) saveGame();
    });
    window.addEventListener('beforeunload', () => {
        if (gameState && gameState.juegoIniciado && !gameState.juegoTerminado) saveGame();
    });
}
