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

echo "=== Pre-commit checks ==="

# 1. Format check
echo ">> cargo fmt --check"
cargo fmt --all -- --check
echo "   ✔ fmt passed"

# 2. Clippy lint
echo ">> cargo clippy"
cargo clippy -- -D warnings
echo "   ✔ clippy passed"

# 3. Tests
echo ">> cargo test"
cargo test
echo "   ✔ tests passed"

# 4. ESLint check (grove-web)
if [ -d "grove-web" ]; then
    echo ">> eslint (grove-web)"
    (cd grove-web && pnpm eslint src/ --max-warnings 0)
    echo "   ✔ eslint passed"
fi

# 5. Version bump check (skip on master branch)
current_branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$current_branch" != "master" ]; then
    echo ">> version bump check"
    current_version=$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/')
    master_version=$(git show master:Cargo.toml 2>/dev/null | grep '^version' | head -1 | sed 's/.*"\(.*\)"/\1/')
    if [ -n "$master_version" ] && [ "$current_version" = "$master_version" ]; then
        echo "   ✘ Cargo.toml version ($current_version) is the same as master."
        echo "     Please bump the version before committing."
        exit 1
    fi
    echo "   ✔ version differs from master ($master_version → $current_version)"
fi

echo "=== All checks passed ==="
