#!/usr/bin/env bash
# 提交前做轻量检查：Python 格式 + 前端 TypeScript。
# 全量 pytest 放在 pre-push，避免每次 commit 都跑一遍。
set -euo pipefail

cd "$(git rev-parse --show-toplevel)"

if [ "${SKIP_TESTS:-0}" = "1" ]; then
    echo "[pre-commit] SKIP_TESTS=1，跳过检查"
    exit 0
fi

staged="$(git diff --cached --name-only --diff-filter=ACMR)"

python_files=()
frontend_changed=0
while IFS= read -r path; do
    [ -z "$path" ] && continue
    case "$path" in
        *.py)
            [ -f "$path" ] && python_files+=("$path")
            ;;
        web/frontend/*)
            frontend_changed=1
            ;;
    esac
done <<< "$staged"

if [ "${#python_files[@]}" -gt 0 ]; then
    echo "[pre-commit] 检查 Python 格式..."
    uv run --group dev ruff format --check "${python_files[@]}"
    # ⚠️ 只跑 format 不够：format 不管「未使用导入 / 未排序导入 / 宽 except」这类
    # 问题，之前全仓攒了 6 条（含一个 F401 死导入）没人拦。两条一起跑才算校验。
    echo "[pre-commit] 检查 Python lint..."
    uv run --group dev ruff check "${python_files[@]}"
    echo "[pre-commit] Python 格式 + lint 通过"
fi

if [ "$frontend_changed" -eq 1 ]; then
    .githooks/run-frontend-tsc.sh
fi
