"""Показать короткий runtime-срез публичного каталога TokenTool."""

from __future__ import annotations

import json
import sys
from typing import Any
from urllib.error import HTTPError, URLError
from urllib.request import urlopen


MODELS_URL = "https://api.tokentool.ru/api/v1/models"
DISPLAY_LIMIT = 10


def extract_models(body: Any) -> list[dict[str, Any]]:
    if not isinstance(body, dict) or not isinstance(body.get("data"), list):
        raise ValueError("Ответ API не содержит массив data.")
    return body["data"]


def main() -> int:
    try:
        with urlopen(MODELS_URL, timeout=30) as response:
            body = json.load(response)
        models = extract_models(body)
    except HTTPError as error:
        print(f"TokenTool вернул HTTP {error.code}.", file=sys.stderr)
        return 1
    except URLError as error:
        print(f"Не удалось подключиться к TokenTool: {error.reason}", file=sys.stderr)
        return 1
    except (ValueError, json.JSONDecodeError) as error:
        print(str(error), file=sys.stderr)
        return 1

    for model in models[:DISPLAY_LIMIT]:
        model_id = model.get("id")
        name = model.get("name")
        if isinstance(model_id, str) and isinstance(name, str):
            print(f"{model_id}\t{name}")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
