"""
Smoke test for BOT/render_recap.py in --mode player.

Usage:
    source ../SHARED/.venv/bin/activate && python BOT/tests/smoke_player_recap.py
"""

import sqlite3
import os
import subprocess
import sys
import tempfile
from pathlib import Path

_storage_env = os.environ.get("STORAGE_VOL_PATH", "").strip()
if not _storage_env:
    raise RuntimeError("STORAGE_VOL_PATH must be set")
STORAGE = Path(_storage_env)
SEASON_START = "1772348400"
SEASON_END   = "1777852799"
SEASON       = "2026-II"


def pick_uid() -> str:
    conn = sqlite3.connect(f"file:{STORAGE/'sq_battles.db'}?mode=ro", uri=True)
    cur = conn.execute(
        "SELECT UID FROM player_games_hist "
        "WHERE endtime_unix BETWEEN ? AND ? "
        "GROUP BY UID ORDER BY COUNT(*) DESC LIMIT 1",
        (int(SEASON_START), int(SEASON_END)),
    )
    row = cur.fetchone()
    conn.close()
    return row[0] if row else ""


def run_smoke(uid: str, theme: str = "dark", lang: str = "en") -> int:
    with tempfile.TemporaryDirectory() as tmp:
        out = Path(tmp) / f"player-{theme}-{lang}.png"
        cmd = [
            sys.executable,
            "BOT/render_recap.py",
            "--mode", "player",
            "--uid", uid,
            "--season", SEASON,
            "--season-start", SEASON_START,
            "--season-end", SEASON_END,
            "--theme", theme,
            "--lang", lang,
            "--out", str(out),
        ]
        print("Running:", " ".join(cmd))
        result = subprocess.run(cmd, capture_output=True, text=True)
        print("stdout:", result.stdout)
        print("stderr:", result.stderr)
        if result.returncode != 0:
            print(f"FAIL: exit={result.returncode}")
            return result.returncode
        size = out.stat().st_size if out.exists() else 0
        if size < 10_000:
            print(f"FAIL: suspicious size {size} bytes at {out}")
            return 1
        print(f"OK: wrote {size} bytes ({theme}/{lang})")
        return 0


def main() -> int:
    uid = pick_uid()
    if not uid:
        print("FAIL: no UID with season activity available for smoke test")
        return 1
    print(f"Using UID {uid}")
    code = 0
    for theme in ("light", "dark"):
        for lang in ("en", "ru"):
            code |= run_smoke(uid, theme=theme, lang=lang)
    return code


if __name__ == "__main__":
    sys.exit(main())
