"""
Top leagues loader utility.

Loads league IDs from top_leagues.json with light validation and caching.
"""

from __future__ import annotations

import json
from functools import lru_cache
from pathlib import Path
from typing import Any, Set


def _candidate_paths() -> list[Path]:
    here = Path(__file__).resolve()
    # .../ai-engine/utils/top_leagues.py
    repo_root = here.parents[2]
    ai_engine_root = here.parents[1]
    return [
        repo_root / "top_leagues.json",
        ai_engine_root / "top_leagues.json",
    ]


def _extract_ids(payload: Any) -> Set[str]:
    ids: Set[str] = set()
    if not isinstance(payload, list):
        return ids

    for item in payload:
        if isinstance(item, str):
            val = item.strip()
            if val:
                ids.add(val)
            continue

        if isinstance(item, dict):
            for key in ("id", "league_id", "leagueId"):
                raw = item.get(key)
                if raw is not None:
                    val = str(raw).strip()
                    if val:
                        ids.add(val)
                    break

    return ids


@lru_cache(maxsize=1)
def load_top_league_ids() -> Set[str]:
    for path in _candidate_paths():
        if not path.exists():
            continue
        try:
            with path.open("r", encoding="utf-8") as f:
                payload = json.load(f)
            return _extract_ids(payload)
        except Exception:
            continue
    return set()

