#!/bin/sh
# Koala-core pre-commit hook
# 启用：git config core.hooksPath .githooks
#
# 此脚本是 koala-core 自身崩溃时的最后防线，故不调用 koala-core 命令。
# 用 POSIX sh（非 bash）以最大化兼容性。

set -e

# 1. 仅扫已暂存改动
STAGED=$(git diff --cached --name-only --diff-filter=ACM)

if [ -z "$STAGED" ]; then
  exit 0
fi

# 2. 检查是否有大文件（防误提交）
for f in $STAGED; do
  if [ -f "$f" ]; then
    SIZE=$(wc -c < "$f" | tr -d ' ')
    if [ "$SIZE" -gt 1048576 ]; then
      echo "[koala] Large file (>1MB): $f"
      echo "        添加到 .gitignore 或用 git-lfs"
      exit 1
    fi
  fi
done

# 3. 检查 secret（粗略 grep；正式 CI 用 gitleaks）
#    覆盖 AWS access key、Stripe live key、GitHub PAT。
if echo "$STAGED" | xargs grep -l -E "(AKIA[0-9A-Z]{16}|sk_live_|ghp_[A-Za-z0-9]{36})" 2>/dev/null; then
  echo "[koala] Possible secret detected"
  echo "        使用环境变量或密钥管理器"
  exit 1
fi

# 4. 检查是否手编 Tier 1（AUTO-GENERATED）文件
for f in $STAGED; do
  if [ -f "$f" ] && head -3 "$f" 2>/dev/null | grep -q "AUTO-GENERATED"; then
    echo "[koala] Cannot edit AUTO-GENERATED file: $f"
    echo "        改源数据后跑 koala-core wiki gen 重生成"
    exit 1
  fi
done

# 5. 引导期：跑通用语言工具（按存在的项目文件分发）
if [ -f "Cargo.toml" ]; then
  cargo fmt --check 2>/dev/null || {
    echo "[koala] cargo fmt --check failed (运行 'cargo fmt' 修复)"
    exit 1
  }
fi

# 6. 引导期完成后由 koala-core check 接管。
#    取消下一行注释启用：
# koala-core check --invariant-only 2>/dev/null || true

exit 0
