#!/usr/bin/env bash
set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
TESTING_TS_NODE="${ROOT_DIR}/testing/node_modules/.bin/ts-node"

if ! bash "${ROOT_DIR}/scripts/check-agent-assets.sh" >/dev/null; then
  echo "pre-push: agent 目录未同步，请先运行: npm run sync:skills" >&2
  exit 1
fi

if ! bash "${ROOT_DIR}/scripts/check-entry-docs.sh" >/dev/null; then
  echo "pre-push: 入口文档未同步，请先运行: bash scripts/sync-entry-docs.sh" >&2
  exit 1
fi

# 显式走 testing/node_modules 本地 ts-node：理由同 pre-commit（npx 会偷拉 TS 7 触发 TS5107）
if [ ! -x "$TESTING_TS_NODE" ]; then
  echo "pre-push: 未找到 testing/node_modules/.bin/ts-node，请先运行: cd testing && npm install" >&2
  exit 1
fi

if ! (cd "${ROOT_DIR}/testing" && "$TESTING_TS_NODE" scripts/contract-check.ts) >/dev/null; then
  echo "pre-push: 契约校验未通过，请先运行: npm run test:contract" >&2
  exit 1
fi

# B3 check-pr-topic-span 已在 #317 撤下（2026-05-17）：跟 #391「PR 拆分按主题
# 不按规模」规则正面冲突，6 天 55 PR 命中 12 全是合理大 PR。脚本保留供手动调用。

# AI 本地前置自检 (#259 C3+C4)：跑 ai-review-local.sh 把 finding 左移到 push 前
# 用 git config --local push.aiChecksha 记当前 HEAD，避免同 HEAD 重复 push 时重跑 AI
# 紧急逃生：FFOA_SKIP_AI_REVIEW_LOCAL=1 跳过（CI / 紧急 hotfix 用）
# 取舍：claude CLI 不存在或脚本异常时静默跳过，不阻塞没装 AI 工具的开发机
if [ -n "${FFOA_SKIP_AI_REVIEW_LOCAL:-}" ]; then
  echo "pre-push: 跳过 AI 自检（FFOA_SKIP_AI_REVIEW_LOCAL set）" >&2
elif ! command -v claude >/dev/null 2>&1; then
  : # 没装 claude CLI 的开发机静默跳过
else
  CURRENT_HEAD=$(git rev-parse HEAD)
  LAST_CHECKED=$(git config --local push.aiChecksha 2>/dev/null || echo "")
  if [ "$CURRENT_HEAD" = "$LAST_CHECKED" ]; then
    echo "pre-push: AI 自检结果已缓存 (HEAD=${CURRENT_HEAD:0:8})，跳过" >&2
  else
    echo "pre-push: 跑本地 AI Review 自检（可 FFOA_SKIP_AI_REVIEW_LOCAL=1 跳过）" >&2
    set +e
    bash "${ROOT_DIR}/scripts/dev/ai-review-local.sh"
    AI_EXIT=$?
    set -e
    case $AI_EXIT in
      0|1)
        # pass / pass_with_risk：允许 push，记 SHA 防下次重跑
        git config --local push.aiChecksha "$CURRENT_HEAD"
        ;;
      2)
        # needs_fix 或脚本异常：警告但不阻断（避免 ai-review-local.sh 自身 bug 卡住所有 push）
        echo "pre-push: ⚠️  AI 自检 verdict=needs_fix（或脚本异常），建议先修；强推：FFOA_SKIP_AI_REVIEW_LOCAL=1" >&2
        git config --local push.aiChecksha "$CURRENT_HEAD"
        ;;
      3)
        # block：阻断 push
        echo "pre-push: 🚫 AI 自检 verdict=block（硬阻断），请先修；确认无误强推：FFOA_SKIP_AI_REVIEW_LOCAL=1" >&2
        exit 1
        ;;
      *)
        echo "pre-push: ⚠️  AI 自检脚本异常 (exit=$AI_EXIT)，不阻断 push" >&2
        ;;
    esac
  fi
fi
