set shell := ["bash", "-euo", "pipefail", "-c"]

# List available recipes
default:
    @just --list

# Install Git hooks
[group('setup')]
[script]
install-git-hooks:
    if git rev-parse --show-toplevel >/dev/null 2>&1; then
        bun run lefthook install
    else
        printf '%s\n' 'Skipping Lefthook installation because this directory is not a Git repository yet.'
    fi

# Install dependencies for CI
[group('setup')]
setup-ci:
    uv sync --locked --group dev
    bun install --frozen-lockfile

# Set up development environment
[group('setup')]
setup-dev: update-dev install-git-hooks

# Update development dependencies
[group('setup')]
[script]
update-dev:
    if ! uv sync --group dev 2>/dev/null; then
        printf '%s\n' 'Recreating broken .venv'
        rm -rf .venv
        uv sync --group dev
    fi
    if ! bun install 2>/dev/null; then
        printf '%s\n' 'Recreating broken node_modules'
        rm -rf node_modules
        bun install
    fi

# Run all pre-commit hooks
[group('check')]
check-all:
    bun run lefthook run pre-commit --force --all-files

# Run test suite
[group('test')]
test:
    uv run pytest
