# Pre-commit hooks for claude-howto project
# Run `pre-commit install` to set up hooks
# Run `pre-commit run --all-files` to check all files

default_language_version:
  python: python3.11

repos:
  # Ruff - Fast Python linter and formatter
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.8.2
    hooks:
      - id: ruff
        name: ruff-lint
        args: [--fix, --exit-non-zero-on-fix]
        types_or: [python, pyi]
        files: ^scripts/
      - id: ruff-format
        name: ruff-format
        types_or: [python, pyi]
        files: ^scripts/

  # Bandit - Security linter
  - repo: https://github.com/PyCQA/bandit
    rev: 1.7.10
    hooks:
      - id: bandit
        name: bandit-security
        args: [-c, scripts/pyproject.toml]
        additional_dependencies: ["bandit[toml]"]
        types: [python]
        files: ^scripts/
        exclude: ^scripts/tests/

  # Standard pre-commit hooks
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: check-yaml
        name: check-yaml
        args: [--allow-multiple-documents]
      - id: check-toml
        name: check-toml
      - id: end-of-file-fixer
        name: fix-end-of-file
      - id: trailing-whitespace
        name: fix-trailing-whitespace
      - id: check-added-large-files
        name: check-large-files
        args: [--maxkb=1000]
      - id: check-merge-conflict
        name: check-merge-conflict

  # mypy - Type checking
  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v1.13.0
    hooks:
      - id: mypy
        name: mypy-type-check
        args: [--config-file, scripts/pyproject.toml]
        files: ^scripts/
        exclude: ^scripts/tests/

  # Local doc quality hooks (mirrors CI checks — CI is a 2nd pass of these)
  - repo: local
    hooks:
      - id: markdown-lint
        name: markdown-lint
        language: node
        entry: markdownlint
        args: ['--ignore', 'node_modules', '--ignore', '.venv', '--config', '.markdownlint.json']
        types: [markdown]
        additional_dependencies: ['markdownlint-cli']

      - id: cross-references
        name: cross-references
        language: system
        entry: python scripts/check_cross_references.py
        pass_filenames: false
        types: [markdown]

      - id: mermaid
        name: mermaid-syntax
        language: system
        entry: python scripts/check_mermaid.py
        pass_filenames: false
        types: [markdown]
        verbose: true

      - id: link-check
        name: link-check
        language: system
        entry: python scripts/check_links.py
        pass_filenames: false
        types: [markdown]
        verbose: true

      - id: build-epub
        name: build-epub
        language: system
        entry: uv run scripts/build_epub.py
        pass_filenames: false
        files: ^(.*\.md|scripts/build_epub\.py)$

  # Vietnamese documentation checks
  - repo: local
    hooks:
      - id: vietnamese-markdown-lint
        name: vietnamese-markdown-lint
        language: node
        entry: markdownlint
        args: ['--ignore', 'node_modules', '--ignore', '.venv', '--config', '.markdownlint.json']
        files: ^vi/.*\.md$
        additional_dependencies: ['markdownlint-cli']

      - id: vietnamese-cross-references
        name: vietnamese-cross-references
        language: system
        entry: python scripts/check_cross_references.py --lang vi
        pass_filenames: false
        files: ^vi/.*\.md$

      - id: vietnamese-mermaid
        name: vietnamese-mermaid-syntax
        language: system
        entry: python scripts/check_mermaid.py
        pass_filenames: false
        files: ^vi/.*\.md$
        verbose: true

      - id: vietnamese-link-check
        name: vietnamese-link-check
        language: system
        entry: python scripts/check_links.py
        pass_filenames: false
        files: ^vi/.*\.md$
        verbose: true

      - id: vietnamese-build-epub
        name: vietnamese-build-epub
        language: system
        entry: uv run scripts/build_epub.py --lang vi
        pass_filenames: false
        files: ^(vi/.*\.md|scripts/build_epub\.py)$
