import json
import os
import sys
from urllib import error, request


ENDPOINT = "https://api.tikway.ai/v1/chat/completions"


def main():
    api_key = os.environ.get("TIKWAY_API_KEY", "").strip()
    if not api_key:
        raise RuntimeError("请先在当前终端设置 TIKWAY_API_KEY。")

    payload = {
        "model": os.environ.get("TIKWAY_MODEL", "").strip() or "openai/gpt-5.4-mini",
        "messages": [
            {"role": "user", "content": "请用一句中文解释什么是 API。"}
        ],
        "stream": False,
    }
    req = request.Request(
        ENDPOINT,
        data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
        headers={
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json",
        },
        method="POST",
    )

    try:
        with request.urlopen(req, timeout=60) as response:
            result = json.loads(response.read().decode("utf-8"))
    except error.HTTPError as exc:
        request_id = exc.headers.get("x-request-id", "未提供")
        detail = "请查看错误码文档。"
        try:
            body = json.loads(exc.read().decode("utf-8"))
            api_error = body.get("error", {}) if isinstance(body, dict) else {}
            if isinstance(api_error, dict):
                code = api_error.get("code") or api_error.get("type") or "unknown"
                message = str(api_error.get("message", ""))[:300]
                detail = f"{code}: {message}"
        except (ValueError, UnicodeError):
            pass
        raise RuntimeError(
            f"HTTP {exc.code}；request_id={request_id}；{detail}"
        ) from None
    except error.URLError as exc:
        raise RuntimeError(f"网络或 TLS 连接失败：{exc.reason}") from None

    if not isinstance(result, dict):
        raise RuntimeError("响应不是 JSON 对象，请检查接口地址。")
    choices = result.get("choices")
    if not isinstance(choices, list) or not choices:
        raise RuntimeError("响应没有可读取的 choices。")
    choice = choices[0]
    message = choice.get("message", {}) if isinstance(choice, dict) else {}
    text = message.get("content") if isinstance(message, dict) else None
    if not isinstance(text, str):
        raise RuntimeError("未返回文本 content，请检查模型能力及响应结构。")
    print(text)


if __name__ == "__main__":
    try:
        main()
    except (RuntimeError, TimeoutError, ValueError, UnicodeError) as exc:
        print(f"调用未完成：{exc}", file=sys.stderr)
        sys.exit(1)
