"""
测试脚本：上传文件到 OSS → 获取 URL → 发送给 GLM 进行识别

用法:
    cd server
    source ~/.bashrc && source .venv/bin/activate
    python -m utils.test_oss_glm --file <本地文件路径> [--prompt "描述一下这张图片"]
"""

import argparse
import sys
from pathlib import Path

# 确保 server 目录在 sys.path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from utils.oss_uploader import upload_file
from utils.glm_adapter import glm_chat_sync


def main():
    parser = argparse.ArgumentParser(description="上传文件到 OSS 并让 GLM 读取")
    parser.add_argument("--file", required=True, help="要上传的本地文件路径")
    parser.add_argument(
        "--prompt", default="请描述一下这张图片的内容", help="发给 GLM 的提示词"
    )
    parser.add_argument(
        "--model", default="glm-4.6v", help="GLM 模型名称（默认: glm-4.6v）"
    )
    args = parser.parse_args()

    # ── 第一步：上传文件到 OSS ────────────────────────────────
    file_path = args.file
    if not Path(file_path).exists():
        print(f"❌ 文件不存在: {file_path}")
        sys.exit(1)

    print(f"📤 正在上传文件: {file_path}")
    oss_result = upload_file(file_path)
    file_url = oss_result["url"]
    print(f"✅ 上传成功!")
    print(f"   URL: {file_url}")
    print()

    # ── 第二步：构建消息，把 URL 发给 GLM ──────────────────────
    messages = [
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url": file_url},
                },
                {
                    "type": "text",
                    "text": args.prompt,
                },
            ],
        }
    ]

    print(f"🤖 正在请求 GLM ({args.model}) 识别图片...")
    print(f"   提示词: {args.prompt}")
    print()

    result = glm_chat_sync(
        messages=messages,
        model=args.model,
        temperature=0.7,
        max_tokens=2048,
    )

    print("─" * 60)
    print("📝 GLM 回复:")
    print("─" * 60)
    print(result["content"])
    print("─" * 60)

    if result.get("usage"):
        usage = result["usage"]
        print(
            f"\n📊 Token 用量: 输入 {usage['promptTokens']} | "
            f"输出 {usage['completionTokens']} | "
            f"总计 {usage['totalTokens']}"
        )


if __name__ == "__main__":
    main()
