#!/usr/bin/env bash
#
# Pre-commit hook for llama-ui
# Runs: format (staged files only) + type-check
# Stashes unstaged changes temporarily and restores them after.

# Only run when there are staged changes in tools/ui/
if ! git diff --cached --name-only | grep -q "^tools/ui/"; then
    exit 0
fi

REPO_ROOT=$(git rev-parse --show-toplevel)
cd "$REPO_ROOT/tools/ui"

# Check that node_modules exists
if [ ! -d "node_modules" ]; then
    echo "❌ node_modules not found. Run 'npm ci' first."
    exit 1
fi

# Stash unstaged changes in tools/ui/ so they don't interfere
stash_name="pi-ui-precommit"
git stash push --keep-index -u -m "$stash_name" -- tools/ui/ 2>/dev/null || true

echo "Running pre-commit checks for llama-ui..."

# Format only staged files
staged_ui=$(git diff --cached --name-only -- tools/ui/)
if [ -n "$staged_ui" ]; then
    echo "$staged_ui" | xargs npm run format
    format_ok=$?
    # Re-stage formatted files
    git add tools/ui/
else
    format_ok=0
fi

# Type-check the clean tree
npm run check
check_ok=$?

# Restore stashed changes
if git stash list | grep -q "$stash_name"; then
    git stash pop 2>/dev/null || true
fi

if [ $format_ok -ne 0 ]; then
    echo "❌ Format failed"
    exit 1
fi
if [ $check_ok -ne 0 ]; then
    echo "❌ Type check failed"
    exit 1
fi

echo "✅ Pre-commit checks passed"
exit 0
