#!/bin/bash
# Pre-push hook for kimi-tachi
# Runs CI checks before pushing to remote
# 
# Install: cp hooks/pre-push .git/hooks/pre-push && chmod +x .git/hooks/pre-push
#
# Environment variables:
#   SKIP_BUILD=1    - Skip build check (faster, but may miss packaging issues)
#   SKIP_TESTS=1    - Skip tests (not recommended)
#   SKIP_LINT=1     - Skip lint check (not recommended)

set -e

echo "🔍 Running pre-push checks..."
echo ""

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Check if uv is available
if ! command -v uv &> /dev/null; then
    echo -e "${RED}❌ uv not found. Please install uv first:${NC}"
    echo "   curl -LsSf https://astral.sh/uv/install.sh | sh"
    exit 1
fi

STEP=0
TOTAL=5

# Step 1: Lint checks
STEP=$((STEP + 1))
if [ -z "$SKIP_LINT" ]; then
    echo -e "${BLUE}[$STEP/$TOTAL]${NC} 📋 Running lint checks..."
    if ! make check; then
        echo -e "${RED}❌ Lint checks failed!${NC}"
        echo "   Run 'make format' to auto-fix issues."
        exit 1
    fi
    echo -e "${GREEN}✅ Lint checks passed${NC}"
else
    echo -e "${YELLOW}[$STEP/$TOTAL] ⏭️  Skipping lint checks (SKIP_LINT=1)${NC}"
fi
echo ""

# Step 2: Tests
STEP=$((STEP + 1))
if [ -z "$SKIP_TESTS" ]; then
    echo -e "${BLUE}[$STEP/$TOTAL]${NC} 🧪 Running tests..."
    if ! make test; then
        echo -e "${RED}❌ Tests failed!${NC}"
        echo "   Please fix the failing tests before pushing."
        exit 1
    fi
    echo -e "${GREEN}✅ All tests passed${NC}"
else
    echo -e "${YELLOW}[$STEP/$TOTAL] ⏭️  Skipping tests (SKIP_TESTS=1)${NC}"
fi
echo ""

# Step 3: Version check
STEP=$((STEP + 1))
echo -e "${BLUE}[$STEP/$TOTAL]${NC} 🔢 Checking version consistency..."
if ! .venv/bin/python scripts/check_version.py; then
    echo -e "${RED}❌ Version check failed!${NC}"
    echo "   Please ensure all version files are consistent."
    exit 1
fi
echo -e "${GREEN}✅ Version check passed${NC}"
echo ""

# Step 4: CHANGELOG check
STEP=$((STEP + 1))
echo -e "${BLUE}[$STEP/$TOTAL]${NC} 📝 Checking CHANGELOG..."
CURRENT_VERSION=$(.venv/bin/python -c "import kimi_tachi; print(kimi_tachi.__version__)")
if ! grep -q "## \[$CURRENT_VERSION\]" CHANGELOG.md 2>/dev/null; then
    echo -e "${YELLOW}⚠️  Warning: CHANGELOG.md does not contain entry for v$CURRENT_VERSION${NC}"
    echo "   Consider updating CHANGELOG.md before releasing."
    # Don't fail, just warn
else
    echo -e "${GREEN}✅ CHANGELOG is up to date${NC}"
fi
echo ""

# Step 5: Build check (optional, can be slow)
STEP=$((STEP + 1))
if [ -z "$SKIP_BUILD" ]; then
    echo -e "${BLUE}[$STEP/$TOTAL]${NC} 📦 Running build check..."
    echo "   (This may take a while. Set SKIP_BUILD=1 to skip)"
    if ! make build; then
        echo -e "${RED}❌ Build failed!${NC}"
        exit 1
    fi
    if ! make build-check; then
        echo -e "${RED}❌ Build check failed!${NC}"
        echo "   The package may not install correctly."
        exit 1
    fi
    echo -e "${GREEN}✅ Build check passed${NC}"
else
    echo -e "${YELLOW}[$STEP/$TOTAL] ⏭️  Skipping build check (SKIP_BUILD=1)${NC}"
fi
echo ""

echo -e "${GREEN}✅ All pre-push checks passed!${NC}"
echo ""
echo "🚀 Ready to push!"
exit 0
