# Pre-commit hooks configuration for TimeTracker
# Install with: pre-commit install
# Run manually: pre-commit run --all-files

repos:
  # General file checks
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.5.0
    hooks:
      - id: trailing-whitespace
        args: [--markdown-linebreak-ext=md]
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-json
      - id: check-added-large-files
        args: ['--maxkb=1000']
      - id: check-merge-conflict
      - id: check-case-conflict
      - id: detect-private-key
      - id: mixed-line-ending
        args: ['--fix=lf']

  # Python code formatting
  - repo: https://github.com/psf/black
    rev: 24.8.0
    hooks:
      - id: black
        language_version: python3.11
        args: [--line-length=120]

  # Python import sorting
  - repo: https://github.com/PyCQA/isort
    rev: 5.13.2
    hooks:
      - id: isort
        args: [--profile=black, --line-length=120]

  # Python linting
  - repo: https://github.com/PyCQA/flake8
    rev: 6.1.0
    hooks:
      - id: flake8
        args: [
          --max-line-length=120,
          --extend-ignore=E203,E501,W503,
          --exclude=migrations,
        ]
        additional_dependencies: [
          flake8-docstrings,
          flake8-bugbear,
        ]

  # Security checks
  - repo: https://github.com/PyCQA/bandit
    rev: 1.7.6
    hooks:
      - id: bandit
        args: [-r, app/, -ll]
        pass_filenames: false

  # Markdown linting
  - repo: https://github.com/markdownlint/markdownlint
    rev: v0.12.0
    hooks:
      - id: markdownlint
        args: [--ignore, node_modules]

  # YAML formatting
  - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks
    rev: v2.11.0
    hooks:
      - id: pretty-format-yaml
        args: [--autofix, --indent, '2']

# Optionally, add local hooks for custom checks
  - repo: local
    hooks:
      - id: smoke-tests
        name: Run smoke tests
        entry: pytest
        args: [-m, smoke, --tb=short, -q]
        language: system
        pass_filenames: false
        stages: [commit]
        always_run: false  # Set to true to always run smoke tests on commit

# Configuration
default_language_version:
  python: python3.11

# Skip certain files/directories
exclude: |
  (?x)^(
    migrations/|
    docs/|
    node_modules/|
    .venv/|
    venv/|
    \.git/|
    \.pytest_cache/|
    __pycache__/
  )$

