#!/usr/bin/env bash
# 对外 API 的 curl 冒烟脚本：从「建 Key」到「拿到任务结果」走一遍。
#
# 前置：
#   1. Hub 已启动，且已在控制台「设置 → 集成」创建了一把 Key
#   2. export ZQA_BASE=https://hub.example.com
#      export ZQA_API_KEY=zqa_live_xxx
#   3.（可选）export ZQA_PROJECT=proj_xxx 指定项目，否则自动取第一个
#
# 用法：bash examples/api/curl.sh
set -euo pipefail

BASE="${ZQA_BASE:-http://127.0.0.1:8788}"
KEY="${ZQA_API_KEY:?请先 export ZQA_API_KEY=zqa_live_xxx}"

say() { printf '\n\033[1m== %s ==\033[0m\n' "$*"; }
# 只取 data 字段，便于人读；失败时打印完整响应
jqf() { python3 -c 'import json,sys; d=json.load(sys.stdin); print(json.dumps(d.get("data", d), ensure_ascii=False, indent=2))'; }

say "1. 总览"
curl -sS "$BASE/v1/overview" -H "Authorization: Bearer $KEY" | jqf

say "2. 项目清单"
PROJECTS=$(curl -sS "$BASE/v1/projects" -H "Authorization: Bearer $KEY")
echo "$PROJECTS" | jqf
PROJECT="${ZQA_PROJECT:-$(echo "$PROJECTS" | python3 -c 'import json,sys; d=json.load(sys.stdin)["data"]["items"]; print(d[0]["projectId"] if d else "")')}"
if [ -z "$PROJECT" ]; then
  echo "没有可用项目：请先在控制台为某个节点创建项目" >&2
  exit 1
fi
echo "使用项目：$PROJECT"

say "3. 提交任务（带幂等键）"
SUBMIT=$(curl -sS -X POST "$BASE/v1/jobs" \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: curl-smoke-$(date +%s)" \
  -d "{\"batchId\":\"smoke-$(date +%s)\",\"items\":[{\"kind\":\"ai\",\"projectId\":\"$PROJECT\",\"prompt\":\"列出当前目录的文件并说明用途\",\"externalId\":\"SMOKE-1\"}]}")
echo "$SUBMIT" | jqf
JOB=$(echo "$SUBMIT" | python3 -c 'import json,sys; print(json.load(sys.stdin)["data"]["items"][0]["id"])')
echo "jobId = $JOB"

say "4. 轮询到终态（最多 10 分钟）"
for i in $(seq 1 120); do
  DETAIL=$(curl -sS "$BASE/v1/jobs/$JOB" -H "Authorization: Bearer $KEY")
  STATUS=$(echo "$DETAIL" | python3 -c 'import json,sys; print(json.load(sys.stdin)["data"]["status"])')
  printf '  [%3ds] status=%s\n' $((i * 5)) "$STATUS"
  case "$STATUS" in
    done|failed|cancelled) break ;;
  esac
  sleep 5
done

say "5. 最终结果"
echo "$DETAIL" | jqf

say "6. 用量"
curl -sS "$BASE/v1/usage?days=7" -H "Authorization: Bearer $KEY" | jqf

say "完成"
