"""
測試 Anthropic API 連線(階段 3 前置驗證)。

執行方式:
  ./.venv/Scripts/python.exe dev_test_claude.py

測試內容:
  1. 從 .env 讀 ANTHROPIC_API_KEY
  2. 用 Haiku(最便宜的模型)發一個 5-token 的對話
  3. 顯示模型回應 + 實際花費(token 用量)

預估這次測試成本:< $0.001(0.03 NT$)
"""

import os
import sys
from pathlib import Path

# 從 .env 讀環境變數
try:
    from dotenv import load_dotenv
    # override=True 讓 .env 蓋過 shell 環境變數(避免空字串擋住)
    load_dotenv(Path(__file__).parent / ".env", override=True)
except ImportError:
    # python-dotenv 沒裝就手動讀
    env_path = Path(__file__).parent / ".env"
    if env_path.exists():
        for line in env_path.read_text(encoding="utf-8").splitlines():
            line = line.strip()
            if not line or line.startswith("#") or "=" not in line:
                continue
            k, v = line.split("=", 1)
            os.environ.setdefault(k.strip(), v.strip())

# 強制 stdout 用 UTF-8(Windows console)
try:
    sys.stdout.reconfigure(encoding="utf-8")
except (AttributeError, ValueError):
    pass

import anthropic


def main():
    api_key = os.environ.get("ANTHROPIC_API_KEY", "")
    if not api_key or not api_key.startswith("sk-ant-"):
        print("[ERROR] .env 裡找不到 ANTHROPIC_API_KEY 或格式不對")
        sys.exit(1)

    # 安全顯示:只露前 12 碼跟最後 4 碼
    masked = api_key[:14] + "..." + api_key[-4:]
    print(f"[INFO] API key 載入:{masked}")
    print(f"[INFO] 呼叫 Claude Haiku 4.5,訊息:'用一句話自我介紹'\n")

    client = anthropic.Anthropic(api_key=api_key)

    try:
        response = client.messages.create(
            model="claude-haiku-4-5",
            max_tokens=200,
            messages=[
                {"role": "user", "content": "你是 Coba 系統的 AI 同事「庫柏」,用一句繁體中文自我介紹。"}
            ],
        )
    except anthropic.AuthenticationError:
        print("[ERROR] API key 無效,請去 console 確認。")
        sys.exit(1)
    except anthropic.BadRequestError as e:
        msg = str(e)
        if "credit balance" in msg.lower() or "billing" in msg.lower():
            print("[ERROR] 帳號還沒儲值,請去 console.anthropic.com/settings/billing 加錢")
        else:
            print(f"[ERROR] 請求被拒:{msg}")
        sys.exit(1)
    except Exception as e:
        print(f"[ERROR] 呼叫失敗:{e}")
        sys.exit(1)

    print("=" * 60)
    print("庫柏的回應:")
    print("=" * 60)
    for block in response.content:
        if block.type == "text":
            print(block.text)
    print("=" * 60)

    usage = response.usage
    # Haiku 4.5 價格:input $1/M,output $5/M
    cost_usd = (usage.input_tokens / 1_000_000) * 1.0 + (usage.output_tokens / 1_000_000) * 5.0
    cost_twd = cost_usd * 32

    print(f"\n[token 用量]")
    print(f"  輸入:{usage.input_tokens} tokens")
    print(f"  輸出:{usage.output_tokens} tokens")
    print(f"\n[本次成本]")
    print(f"  US${cost_usd:.6f}")
    print(f"  約 NT${cost_twd:.4f}")
    print(f"\n[OK] API 連線測試成功,可以進階段 3 了。")


if __name__ == "__main__":
    main()
