#!/usr/bin/env python3
"""可选：把 payload.json POST 到 /api/v1/knowledge/ingest。

默认 dry-run（只打印将发什么）；加 --post 才真正发送。
端点/令牌从参数或 env（INGEST_API / INGEST_TOKEN）取；先跑 lint-payload.py 校验过再发。
用法：
    python 创作知识提取-skill/tools/ingest-post.py outputs/<帖>/payload.json --url https://host/api/v1/knowledge/ingest --post
"""
from __future__ import annotations

import argparse
import json
import os
from pathlib import Path

import httpx


def main() -> None:
    ap = argparse.ArgumentParser()
    ap.add_argument("payload")
    ap.add_argument("--url", default=os.getenv("INGEST_API", ""))
    ap.add_argument("--token", default=os.getenv("INGEST_TOKEN", ""))
    ap.add_argument("--post", action="store_true", help="真正发送（默认 dry-run）")
    args = ap.parse_args()

    data = json.loads(Path(args.payload).read_text(encoding="utf-8"))
    payloads = data if isinstance(data, list) else [data]
    print(f"{len(payloads)} 颗知识待入库 → {args.url or '(未指定 --url)'}")

    if not args.post:
        print("dry-run：未发送。确认无误后加 --post。")
        return
    if not args.url:
        raise SystemExit("缺 --url / INGEST_API")
    headers = {"Content-Type": "application/json"}
    if args.token:
        headers["Authorization"] = f"Bearer {args.token}"
    for i, p in enumerate(payloads, 1):
        r = httpx.post(args.url, json=p, headers=headers, timeout=30)
        print(f"  [{i}] {r.status_code} {r.text[:200]}")
        r.raise_for_status()


if __name__ == "__main__":
    main()
