"""
Préférence de thème clair/sombre, mémorisée localement. PySide6 ne suit pas
forcément le thème système selon l'environnement de lancement (venv, AppImage,
absence de plugin de thème de plateforme) — le mode sombre est donc un bascule
explicite plutôt qu'une détection automatique, voir theme_manager.py.
"""

from __future__ import annotations

import json
import logging
from pathlib import Path

logger = logging.getLogger("meshamoto-client.theme_settings")

VALID_THEMES = ("light", "dark")
DEFAULT_THEME = "light"


def load_theme(path: Path) -> str:
    """Retourne le thème mémorisé ("light" ou "dark"), ou DEFAULT_THEME si absent/corrompu."""
    if not path.exists():
        return DEFAULT_THEME
    try:
        data = json.loads(path.read_text(encoding="utf-8"))
        theme = str(data["theme"])
        if theme not in VALID_THEMES:
            raise ValueError(theme)
        return theme
    except (OSError, json.JSONDecodeError, KeyError, ValueError, TypeError):
        logger.warning("Impossible de lire %s, thème mémorisé ignoré", path)
        return DEFAULT_THEME


def save_theme(path: Path, theme: str) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps({"theme": theme}), encoding="utf-8")
