"""
配置查询接口（get_key）独立工具。

直接调用 config/get_key 接口查询活动配置。

使用示例：
    python get_key_api.py
"""
import json
import logging
from typing import Optional

import requests  # pyright: ignore[reportMissingModuleSource]

# ==================== 配置常量 ====================
DEFAULT_REGION = "C"
DEFAULT_TIMEOUT_SECONDS = 10

GET_KEY_URL = "https://config-admin-dev-api.weplayapp.com/config/get_key"
HEADERS = {"Content-Type": "application/x-www-form-urlencoded"}

logger = logging.getLogger(__name__)


# ==================== 对外接口 ====================
def get_key(key: str, region: str = "C", namespace: str = "activity", verbose: bool = True) -> Optional[requests.Response]:
    """
    查询配置中心的 key 值。

    Args:
        key: 配置 key（通常是活动 ID）
        region: 区服代号（如 "C", "A", "J" 等）
        namespace: 命名空间（默认 "activity"）
        verbose: 是否打印详细日志

    Returns:
        Response 对象，包含配置 JSON

    示例返回数据结构:
        {
            "code": 200,
            "result": {
                "value": '{"配置内容JSON字符串"}'
            }
        }
    """
    payload = {
        "key": key,
        "region": region,
        "namespace": namespace,
    }

    try:
        response = requests.post(GET_KEY_URL, data=payload, headers=HEADERS, timeout=DEFAULT_TIMEOUT_SECONDS)
        response.raise_for_status()

        if verbose:
            print(f"========== get_key 请求 ==========")
            print(f"URL: {GET_KEY_URL}")
            print(f"Payload: {payload}")
            print(f"\n========== 响应 ==========")
            print(f"Status Code: {response.status_code}")
            try:
                data = response.json()
                print(f"Response JSON:")
                print(json.dumps(data, indent=2, ensure_ascii=False))
            except:
                print(f"Response Text: {response.text}")

        return response

    except requests.exceptions.Timeout:
        logger.error("Request timeout: url=%s timeout=%ss payload=%s", GET_KEY_URL, DEFAULT_TIMEOUT_SECONDS, payload)
        return None
    except requests.exceptions.RequestException as e:
        status_code = e.response.status_code if e.response else None
        response_text = e.response.text if e.response else ""
        logger.error(
            "Request failed: url=%s status=%s payload=%s error=%s response=%s",
            GET_KEY_URL,
            status_code,
            payload,
            e,
            response_text,
        )
        return None


# ==================== CLI 入口 ====================
def main():
    """命令行交互入口。"""
    logging.basicConfig(level=logging.INFO, format="%(message)s")

    print("=" * 60)
    print("配置查询接口（get_key）工具")
    print("=" * 60)

    # 获取参数
    key = input("\n请输入 key (默认: 6193): ").strip() or "6193"
    region = input("请输入 region (默认: C): ").strip().upper() or "C"
    namespace = input("请输入 namespace (默认: activity): ").strip() or "activity"

    print(f"\n开始查询...")
    print(f"  key: {key}")
    print(f"  region: {region}")
    print(f"  namespace: {namespace}")
    print()

    # 调用接口
    get_key(key=key, region=region, namespace=namespace, verbose=True)


if __name__ == "__main__":
    main()
