import json

from ccma.config import AppConfig, load_config


def test_paths_and_automation_settings_round_trip(tmp_path, monkeypatch) -> None:
    monkeypatch.setenv("CCMA_CONFIG_DIR", str(tmp_path / "config"))
    expected = AppConfig(
        store_path=str(tmp_path / "members"),
        gnucash_path=str(tmp_path / "club.gnucash"),
        theme_mode="light",
        run_housekeeper_on_startup=False,
        splash_minimum_seconds=0,
        birthday_days_before=10,
        birthday_days_after=3,
        anniversary_days_before=21,
        anniversary_days_after=5,
        anniversary_intervals="30D;2M;1Y;10Y",
        window_geometry="1200x800-1800+40",
        window_state="maximized",
        monitor_bounds=(-1920, 0, 1920, 1080),
    )
    expected.save()

    loaded = load_config()
    assert loaded == expected
    raw = json.loads(expected.path.read_text(encoding="utf-8"))
    assert raw["schema_version"] == 1
    assert raw["monitor_bounds"] == [-1920, 0, 1920, 1080]
    assert raw["splash_minimum_seconds"] == 0


def test_splash_minimum_defaults_to_five_and_is_clamped(tmp_path, monkeypatch) -> None:
    monkeypatch.setenv("CCMA_CONFIG_DIR", str(tmp_path / "config"))
    assert load_config().splash_minimum_seconds == 5.0

    config = AppConfig(splash_minimum_seconds=-10)
    config.save()
    assert load_config().splash_minimum_seconds == 0.0


def test_store_path_can_be_overridden_from_ccma_environment(tmp_path, monkeypatch) -> None:
    monkeypatch.setenv("CCMA_CONFIG_DIR", str(tmp_path / "config"))
    monkeypatch.setenv("CCMA_STORE", str(tmp_path / "store"))

    assert load_config().store_path == str(tmp_path / "store")
