#!/usr/bin/env sh
# ============================================================
# .husky/pre-commit
# Git pre-commit Hook — 代码提交前自动验证
#
# 执行流程:
#   Step 1 → 运行全部单元测试 + 生成覆盖率报告
#   Step 2 → 检查覆盖率是否达到 100%（v8 ignore 豁免除外）
#   Step 3 → 通过则允许提交，不通过则阻止并给出修改提示
#
# 临时跳过: git commit --no-verify
# ============================================================

echo ""
echo "=================================================="
echo "  🔍 Pre-Commit 检查启动"
echo "=================================================="
echo ""

# ── Step 1: 运行单元测试 + 生成覆盖率报告 ──────────
echo "📋 Step 1: 运行单元测试并生成覆盖率报告..."
echo ""

pnpm run test:coverage

if [ $? -ne 0 ]; then
  echo ""
  echo "=================================================="
  echo "  ❌ Step 1 失败: 存在未通过的测试用例或覆盖率未达标"
  echo "=================================================="
  echo ""
  echo "  📌 请修复以上失败的测试后重新提交"
  echo "  💡 本地调试命令: pnpm run test"
  echo ""
  exit 1
fi

echo ""
echo "  ✅ Step 1 通过: 所有测试用例通过"
echo ""

# ── Step 2: 解析覆盖率报告，逐文件检查是否达标 ──────
echo "📊 Step 2: 检查覆盖率是否达到 100%..."
echo ""

node scripts/check-coverage.mjs

if [ $? -ne 0 ]; then
  echo ""
  echo "=================================================="
  echo "  ❌ Step 2 失败: 覆盖率未达到 100%"
  echo "=================================================="
  echo ""
  echo "  📌 请根据以上信息补充测试用例"
  echo "  📌 如果代码确实无法测试，请添加豁免注释:"
  echo "       // v8 ignore next -- @preserve: 原因说明"
  echo "  💡 查看详细报告: pnpm run test:coverage"
  echo ""
  exit 1
fi

echo ""
echo "=================================================="
echo "  🎉 所有检查通过，正在提交代码..."
echo "=================================================="
echo ""
