"""Record the BGG XML fixtures the test suite replays.

Runs the real resolve logic with the cache pointed at tests/fixtures/
bgg_cache/, so exactly the responses resolve needs get recorded (live,
rate-limited). Run once; commit the fixtures. Re-running only fetches
whatever is not already recorded.

Usage: uv run python scripts/record_fixtures.py
"""

from __future__ import annotations

import os
from pathlib import Path

from fixture_common import FIXTURE_CACHE

from bggpipe.bgg_client import BGGClient
from bggpipe.resolve import load_titles, resolve_entry


def main() -> None:
    if not os.environ.get("BGG_API_TOKEN"):
        raise SystemExit(
            "BGG_API_TOKEN is not set. The XML API requires a registered "
            "application token (https://boardgamegeek.com/applications). "
            "Until one exists, the committed fixtures are the hand-crafted "
            "stubs from scripts/write_stub_fixtures.py; delete "
            f"{FIXTURE_CACHE} and re-run this script to replace them with "
            "real recordings."
        )
    client = BGGClient(cache_dir=FIXTURE_CACHE)
    for entry in load_titles(Path("tests/data/titles.json")):
        row = resolve_entry(client, entry)
        print(
            f"{entry.title_raw!r}: {row.match_status} "
            f"{row.bgg_name or '-'} ({row.bgg_id or '-'}) {row.version_status}"
        )
    print(f"\nFixtures recorded in {FIXTURE_CACHE}:")
    for f in sorted(FIXTURE_CACHE.iterdir()):
        print(f"  {f.name}")


if __name__ == "__main__":
    main()
