#!/usr/bin/env bash
set -euo pipefail

repo_root="$(git rev-parse --show-toplevel)"
cd "$repo_root"

rust_files=()
python_files=()

while IFS= read -r file; do
  case "$file" in
    *.rs)
      rust_files+=("$file")
      ;;
    python/*.py)
      python_files+=("$file")
      ;;
  esac
done < <(git diff --cached --name-only --diff-filter=ACMR)

if ((${#rust_files[@]} > 0)); then
  echo "pre-commit: formatting Rust"
  cargo fmt --all
  if ((${#rust_files[@]} > 0)); then
    git add -- "${rust_files[@]}"
  fi
fi

if ((${#python_files[@]} > 0)); then
  if ! command -v uv >/dev/null 2>&1; then
    echo "pre-commit: uv is required to format Python files" >&2
    exit 1
  fi

  echo "pre-commit: formatting Python"
  (
    cd python
    uv run ruff format .
  )
  git add -- "${python_files[@]}"
fi
