# Pre-commit hooks — local Red→Green 게이트 (피드백 #6/#7/#8).
# 사용법:
#   uv pip install pre-commit              # 또는 pip install pre-commit
#   pre-commit install                      # .git/hooks/pre-commit 등록
#   pre-commit run --all-files              # 수동 전체 실행
#
# 이후 모든 `git commit`이 자동으로 ruff + 기본 위생 검사 통과해야 commit됨.
# 피드백 #6 "Red → Green 완료 시에만 Git 자동 업로드" 의 첫 단계.

repos:
  # Ruff — 린트 + 자동 수정 (project ruff.toml 적용)
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.15.12
    hooks:
      - id: ruff
        args: [--fix, --exit-non-zero-on-fix]
      - id: ruff-format
        # ruff format은 black 호환 — 기존 스타일 보존을 위해 비활성으로 시작.
        # 활성화 원하면 stages=[manual] 제거 + 한 번 전체 적용.
        stages: [manual]

  # 기본 위생
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: trailing-whitespace
        exclude: ^(_unused/|.*\.bak.*)
      - id: end-of-file-fixer
        exclude: ^(_unused/|.*\.bak.*|.*\.png|.*\.dxf|.*\.pdf|.*\.mp4|.*\.gif)
      - id: check-yaml
      - id: check-toml
      - id: check-added-large-files
        args: [--maxkb=20480]   # 20MB 한도 — Design/SAMPLE_CAD 큰 파일은 이미 git에 있음
      - id: check-merge-conflict
      - id: detect-private-key

  # 비밀 누출 방지 (gcp-key.json 같은 파일 차단)
  - repo: https://github.com/Yelp/detect-secrets
    rev: v1.5.0
    hooks:
      - id: detect-secrets
        args: ['--baseline', '.secrets.baseline']
        exclude: ^(_unused/|tests/|.*\.bak.*|venv.*/|\.git/)

# 로컬 hook — pytest 빠른 회귀만 (느린 통합 테스트 제외)
# pytest는 pre-commit-hooks가 아닌 local stage로 등록 — pre-commit pull 안 함.
# 사용자가 더 엄격한 게이트 원하면 stages: [pre-push] 활성.
default_install_hook_types: [pre-commit]
default_stages: [pre-commit]

# pytest를 pre-push 스테이지에 두면 commit 빨라지고 push 직전에만 테스트.
# `pre-commit install --hook-type pre-push` 추가로 활성.
ci:
  autofix_commit_msg: 'chore(pre-commit): autofix'
  autoupdate_commit_msg: 'chore(pre-commit): autoupdate hook revs'
