#!/usr/bin/env bash
# 真实网络冒烟（不进 CI）：验证 wire 兼容性——无认证问答 / 工具调用链 / json 事件 / thinking。
# 默认 opencode.ai/zen/v1 + deepseek-v4-flash-free（免 key）；可 env 覆盖：
#   HEY_SMOKE_BASE_URL / HEY_SMOKE_MODEL
# 用法: bash scripts/smoke.sh
set -euo pipefail

BASE_URL="${HEY_SMOKE_BASE_URL:-https://opencode.ai/zen/v1}"
MODEL="${HEY_SMOKE_MODEL:-deepseek-v4-flash-free}"
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
BIN="$ROOT/target/release/hey"

echo "==> build release"
cargo build --release --manifest-path "$ROOT/Cargo.toml"

CFG="$(mktemp)"
trap 'rm -f "$CFG"' EXIT
cat >"$CFG" <<EOF
[provider.smoke]
base_url = "$BASE_URL"
models = ["$MODEL"]
[retry]
enabled = false
EOF
ARGS=(--config "$CFG" -m smoke/$MODEL --no-mcp --no-skills)

echo "==> 1. no-auth streaming Q&A"
OUT="$("$BIN" "${ARGS[@]}" -p "reply with exactly: SMOKE_OK" 2>&1)"
if echo "$OUT" | tail -2 | grep -q "SMOKE_OK"; then
	echo "PASS"
else
	echo "FAIL: $OUT"
	exit 1
fi

echo "==> 2. real tool-call loop (model drives bash)"
OUT="$(cd "$(mktemp -d)" && "$BIN" "${ARGS[@]}" -p "run: echo smoke-tool; reply with the output" 2>&1)"
if echo "$OUT" | grep -q "smoke-tool"; then
	echo "PASS"
else
	echo "FAIL: $OUT"
	exit 1
fi

echo "==> 3. json event stream (+ usage)"
OUT="$(echo "say SMOKE_JSON" | "$BIN" "${ARGS[@]}" --output json -p 2>/dev/null)"
if echo "$OUT" | grep -q '"type":"finished"' && echo "$OUT" | grep -q '"type":"usage"'; then
	echo "PASS"
else
	echo "FAIL: $OUT"
	exit 1
fi

echo "==> 4. effort level (medium; non-tty prints raw)"
OUT="$("$BIN" "${ARGS[@]}" -p -t medium "say SMOKE_THINK" 2>&1)"
if echo "$OUT" | grep -q "SMOKE_THINK"; then
	echo "PASS"
else
	echo "FAIL: $OUT"
	exit 1
fi

echo "ALL SMOKE PASSED"
