"""Persistenter Appearance-State fürs GTK-Frontend.

Eigene kleine JSON neben dem TUI-State (core.state ist whitelist-fokussiert,
das hier ist reine GUI-Präferenz). Liegt in der XDG-data-dir von taninux.
"""
from __future__ import annotations

import json

from taninux.core.paths import data_dir
from taninux.gui.accents import by_key

_DEFAULTS = {"color_scheme": "system", "accent": "ume"}


def _path():
    return data_dir() / "gui.json"


def load() -> dict:
    try:
        data = json.loads(_path().read_text())
    except (json.JSONDecodeError, OSError):
        return dict(_DEFAULTS)
    return {**_DEFAULTS, **{k: data[k] for k in _DEFAULTS if k in data}}


def save(color_scheme: str, accent: str) -> None:
    # accent_hex/-label gleich mit auflösen, damit externe Consumer (eww-Bar)
    # nur diese eine JSON lesen müssen — kein Key→Hex-Mapping nachbauen.
    acc = by_key(accent)
    try:
        _path().write_text(json.dumps(
            {
                "version": 1,
                "color_scheme": color_scheme,
                "accent": accent,
                "accent_hex": acc.hex,
                "accent_label": acc.label,
            },
            indent=2,
        ))
    except OSError:
        pass
