#!/bin/sh
if [ -x .venv/bin/python ]; then
  PYTHON=.venv/bin/python
elif command -v python3 >/dev/null 2>&1; then
  PYTHON=$(command -v python3)
elif command -v python >/dev/null 2>&1; then
  PYTHON=$(command -v python)
else
  echo "[ai-policy] Python interpreter not found." >&2
  exit 1
fi

# 1) AI 마커 차단
"$PYTHON" .claude/hooks/check_no_ai_markers.py --check-staged || exit $?

# 2) staged Python 파일 ruff format + check (experiments / notebooks 제외)
STAGED_PY=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.py$' | grep -vE '^(experiments|notebooks)/' | tr '\n' ' ')
if [ -n "$STAGED_PY" ]; then
  # uv run 은 dartlab 패키지 자동 rebuild 를 트리거 — Windows 에서 .venv/Scripts/dartlab.exe
  # 가 잡혀 있으면 OS error 32 로 hook 실패. .venv 안의 ruff 직접 호출이 가장 안정.
  if [ -x .venv/bin/ruff ]; then
    RUFF=".venv/bin/ruff"
  elif [ -x .venv/Scripts/ruff.exe ]; then
    RUFF=".venv/Scripts/ruff.exe"
  elif command -v ruff >/dev/null 2>&1; then
    RUFF="ruff"
  elif command -v uv >/dev/null 2>&1; then
    RUFF="uv run ruff"
  else
    echo "[ruff] ruff not found in .venv or PATH." >&2
    exit 1
  fi

  $RUFF format --check $STAGED_PY || {
    echo "" >&2
    echo "[ruff-format] 포맷 불일치. 아래 명령으로 재포맷 후 재커밋:" >&2
    echo "  uv run ruff format src/dartlab tests/" >&2
    exit 1
  }
  $RUFF check $STAGED_PY || {
    echo "" >&2
    echo "[ruff-check] lint 에러. 아래 명령으로 자동수정 후 재커밋:" >&2
    echo "  uv run ruff check --fix src/dartlab tests/" >&2
    exit 1
  }

  # 3) staged 파일 camelCase + 9 섹션 docstring lint (diff 기준 — legacy 통과)
  "$PYTHON" -X utf8 tests/audit/lint_camelcase_ast.py --strict $STAGED_PY || {
    echo "" >&2
    echo "[lint-camelcase] snake_case 식별자 또는 4 섹션 docstring 누락. 위 위반을 고친 뒤 재커밋." >&2
    echo "  룰 SSOT: src/dartlab/skills/specs/operation/code.md" >&2
    exit 1
  }
fi
