#!/usr/bin/env bash
# 发布后健康检查:可达性 + Content-Type + 【是否被强制下载】
# 用法: verify.sh <url> [--allow-content-disposition]
#
# 失败语义（spec 2026-06-03-app-builder-publish-scaffold-design follow-up）：
#   首页非 200 → exit 1。
#   检测到 Content-Disposition 强制下载 → 默认 exit 1；带 --allow-content-disposition 时
#   只警告不失败 —— FC 默认域名（*.fcapp.run）对所有响应强制注入这个头，没有自定义域名就
#   消不掉，而「使用者自带 key」履约的验收口径本来就只到「公网可访问」（design ③）。
#   调用方只在那条路径上传这个 flag，别当通用开关用。
#   publish.sh 不加 `|| true` 兜底，verify 失败会让 publish.sh 整体 exit 非 0，
#   触发 daemon runner 的 publish-failed 路径：广播帧 + 回灌 chat user_text 让 assistant 接管修复。
#
# 信息原则：失败原因 echo 到 stderr（runner 的 errorSummary 抠 stderr 最后 20 行）。
set -euo pipefail
URL="${1:?用法: verify.sh <url> [--allow-content-disposition]}"
ALLOW_CD=0
[ "${2:-}" = "--allow-content-disposition" ] && ALLOW_CD=1

echo "== 健康检查: $URL =="
code=$(curl -s -o /dev/null -w "%{http_code}" --max-time 30 "$URL/" || echo 000)
ctype=$(curl -s -o /dev/null -w "%{content_type}" --max-time 30 "$URL/" || echo "")
echo "首页: HTTP $code  ($ctype)"

# 关键检查: 有 Content-Disposition 说明会被浏览器当文件下载(没绑自定义域名的典型症状)
hdr=$(curl -s -D - -o /dev/null --max-time 30 "$URL/" || true)
has_cd=0
if echo "$hdr" | grep -qi 'content-disposition'; then
  has_cd=1
  if [ "$ALLOW_CD" = "1" ]; then
    echo "⚠️  检测到 Content-Disposition —— 浏览器会下载而非渲染。这是 FC 默认域名(*.fcapp.run)的平台行为,"
    echo "    使用者自带 key 履约下没有自定义域名可绑,按验收口径只警告不判失败。要浏览器直出得绑自定义域名。"
  else
    echo "❌ 检测到 Content-Disposition —— 浏览器会下载而非渲染!确认走的是 fc3-domain 自定义域名,而不是 fcapp.run" >&2
  fi
else
  echo "✓ 无 Content-Disposition,浏览器可正常渲染网页"
fi

if [ "$code" = "200" ] && { [ "$has_cd" = "0" ] || [ "$ALLOW_CD" = "1" ]; }; then
  echo "✓ 全链路 OK"
  exit 0
fi

# 失败：原因写 stderr 供 runner 抠成 errorSummary，UI / assistant 都能看清楚
if [ "$code" != "200" ]; then
  echo "❌ verify failed: 首页 HTTP $code (期望 200)；查 s logs 找原因" >&2
fi
exit 1
