"""Config loading: toml knobs, env-only username, unknown-key warning."""

from __future__ import annotations

from pathlib import Path

from bggpipe.config import Config, load_config


def test_defaults_when_no_file(tmp_path, monkeypatch):
    # no config.toml in cwd and no explicit path -> defaults (an EXPLICIT
    # missing path errors instead; see the dedicated test)
    monkeypatch.delenv("BGG_USERNAME", raising=False)
    monkeypatch.chdir(tmp_path)
    cfg = load_config()
    assert cfg == Config()
    assert cfg.cache_dir == Path("data/bgg_cache")


def test_reads_toml(tmp_path, monkeypatch):
    monkeypatch.delenv("BGG_USERNAME", raising=False)
    p = tmp_path / "config.toml"
    p.write_text('data_dir = "elsewhere"\nrate_limit_seconds = 3\n')
    cfg = load_config(p)
    assert cfg.data_dir == Path("elsewhere")
    assert cfg.rate_limit_seconds == 3.0
    assert cfg.matches_path == Path("elsewhere/matches.csv")


def test_username_comes_from_env_only(tmp_path, monkeypatch):
    # the account has exactly one home: BGG_USERNAME in the environment —
    # a bgg_username key in config.toml is deliberately ignored
    p = tmp_path / "config.toml"
    p.write_text('bgg_username = "from_toml"\n')
    monkeypatch.setenv("BGG_USERNAME", "from_env")
    assert load_config(p).bgg_username == "from_env"
    monkeypatch.delenv("BGG_USERNAME")
    assert load_config(p).bgg_username == ""


def test_unknown_toml_keys_warn(tmp_path, monkeypatch):
    # a typo'd knob must not silently fall back to defaults
    import pytest

    monkeypatch.delenv("BGG_USERNAME", raising=False)
    p = tmp_path / "config.toml"
    p.write_text('photo_dir = "oops"\n')
    with pytest.warns(UserWarning, match="photo_dir"):
        load_config(p)


def test_explicit_missing_config_errors_instead_of_silent_defaults(tmp_path):
    import pytest

    with pytest.raises(FileNotFoundError, match="does not exist"):
        load_config(tmp_path / "nope.toml")
