"""Read a saved Gemini generateContent JSON response locally; no API calls."""

import json
from pathlib import Path
import sys


def extract_text(response):
    if not isinstance(response, dict):
        raise ValueError("响应必须是 JSON 对象。")
    if response.get("error"):
        raise ValueError("响应含有 error，请结合 HTTP 状态和响应头排查。")
    candidates = response.get("candidates")
    if not isinstance(candidates, list) or not candidates:
        feedback = response.get("promptFeedback", {})
        reason = feedback.get("blockReason", "未提供") if isinstance(feedback, dict) else "未提供"
        raise ValueError(f"没有候选项；promptFeedback.blockReason={reason}")
    candidate = candidates[0]
    if not isinstance(candidate, dict):
        raise ValueError("首个候选项不是 JSON 对象。")
    content = candidate.get("content", {})
    parts = content.get("parts", []) if isinstance(content, dict) else []
    if not isinstance(parts, list):
        raise ValueError("content.parts 不是数组。")
    text = "".join(
        part["text"] for part in parts
        if isinstance(part, dict) and part.get("thought") is not True
        and isinstance(part.get("text"), str)
    )
    if not text:
        raise ValueError(f"没有普通文本；finishReason={candidate.get('finishReason', 'unknown')}")
    return text


def main():
    path = Path(sys.argv[1] if len(sys.argv) > 1 else "gemini-response.json")
    response = json.loads(path.read_text(encoding="utf-8"))
    print(extract_text(response))
    reason = response["candidates"][0].get("finishReason")
    if reason == "MAX_TOKENS":
        print("注意：达到输出上限，回答可能被截断。", file=sys.stderr)


if __name__ == "__main__":
    try:
        main()
    except (OSError, ValueError, UnicodeError) as exc:
        print(f"读取失败：{exc}", file=sys.stderr)
        sys.exit(1)
