#!/bin/bash
# Post-checkout hook - Dependency manager
# Automatically installs/updates dependencies when switching branches
# Detects changes in dependency files and updates accordingly

# Hook arguments
PREV_HEAD=$1
NEW_HEAD=$2
BRANCH_CHECKOUT=$3

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

# Only run on branch checkout (not file checkout)
if [ "$BRANCH_CHECKOUT" = "0" ]; then
    exit 0
fi

echo ""
echo -e "${BLUE}🔄 Post-checkout: Checking for dependency changes...${NC}"
echo ""

# Track if any dependencies were updated
deps_updated=0

# ============================================================================
# PYTHON DEPENDENCIES
# ============================================================================
# Check if pyproject.toml or requirements.txt changed
if git diff --name-only $PREV_HEAD $NEW_HEAD | grep -q "pyproject.toml\|requirements.txt\|Pipfile"; then
    echo -e "${YELLOW}📦 Python dependencies changed${NC}"

    # UV (preferred)
    if command -v uv &> /dev/null; then
        echo "  Running 'uv sync'..."
        if uv sync; then
            echo -e "  ${GREEN}✓ Python dependencies updated (uv)${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update Python dependencies${NC}"
        fi

    # Pip with pyproject.toml
    elif [ -f "pyproject.toml" ] && command -v pip &> /dev/null; then
        echo "  Running 'pip install -e .'..."
        if pip install -e . --quiet; then
            echo -e "  ${GREEN}✓ Python dependencies updated (pip)${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update Python dependencies${NC}"
        fi

    # Pip with requirements.txt
    elif [ -f "requirements.txt" ] && command -v pip &> /dev/null; then
        echo "  Running 'pip install -r requirements.txt'..."
        if pip install -r requirements.txt --quiet; then
            echo -e "  ${GREEN}✓ Python dependencies updated (pip)${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update Python dependencies${NC}"
        fi

    # Pipenv
    elif [ -f "Pipfile" ] && command -v pipenv &> /dev/null; then
        echo "  Running 'pipenv install'..."
        if pipenv install; then
            echo -e "  ${GREEN}✓ Python dependencies updated (pipenv)${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update Python dependencies${NC}"
        fi

    else
        echo -e "  ${YELLOW}⚠ No Python package manager found${NC}"
    fi
    echo ""
fi

# ============================================================================
# NODE/JAVASCRIPT DEPENDENCIES
# ============================================================================
# Check if package.json or package-lock.json changed
if git diff --name-only $PREV_HEAD $NEW_HEAD | grep -q "package.json\|package-lock.json\|yarn.lock\|pnpm-lock.yaml"; then
    echo -e "${YELLOW}📦 Node dependencies changed${NC}"

    # pnpm (fastest)
    if [ -f "pnpm-lock.yaml" ] && command -v pnpm &> /dev/null; then
        echo "  Running 'pnpm install'..."
        if pnpm install; then
            echo -e "  ${GREEN}✓ Node dependencies updated (pnpm)${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update Node dependencies${NC}"
        fi

    # Yarn
    elif [ -f "yarn.lock" ] && command -v yarn &> /dev/null; then
        echo "  Running 'yarn install'..."
        if yarn install; then
            echo -e "  ${GREEN}✓ Node dependencies updated (yarn)${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update Node dependencies${NC}"
        fi

    # npm
    elif [ -f "package.json" ] && command -v npm &> /dev/null; then
        echo "  Running 'npm install'..."
        if npm install; then
            echo -e "  ${GREEN}✓ Node dependencies updated (npm)${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update Node dependencies${NC}"
        fi

    else
        echo -e "  ${YELLOW}⚠ No Node package manager found${NC}"
    fi
    echo ""
fi

# ============================================================================
# GO DEPENDENCIES
# ============================================================================
# Check if go.mod or go.sum changed
if git diff --name-only $PREV_HEAD $NEW_HEAD | grep -q "go.mod\|go.sum"; then
    echo -e "${YELLOW}📦 Go dependencies changed${NC}"

    if command -v go &> /dev/null; then
        echo "  Running 'go mod download'..."
        if go mod download; then
            echo -e "  ${GREEN}✓ Go dependencies updated${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update Go dependencies${NC}"
        fi
    else
        echo -e "  ${YELLOW}⚠ Go not found${NC}"
    fi
    echo ""
fi

# ============================================================================
# RUST DEPENDENCIES
# ============================================================================
# Check if Cargo.toml or Cargo.lock changed
if git diff --name-only $PREV_HEAD $NEW_HEAD | grep -q "Cargo.toml\|Cargo.lock"; then
    echo -e "${YELLOW}📦 Rust dependencies changed${NC}"

    if command -v cargo &> /dev/null; then
        echo "  Running 'cargo fetch'..."
        if cargo fetch; then
            echo -e "  ${GREEN}✓ Rust dependencies updated${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update Rust dependencies${NC}"
        fi
    else
        echo -e "  ${YELLOW}⚠ Cargo not found${NC}"
    fi
    echo ""
fi

# ============================================================================
# COMPOSER (PHP) DEPENDENCIES
# ============================================================================
# Check if composer.json or composer.lock changed
if git diff --name-only $PREV_HEAD $NEW_HEAD | grep -q "composer.json\|composer.lock"; then
    echo -e "${YELLOW}📦 PHP dependencies changed${NC}"

    if command -v composer &> /dev/null; then
        echo "  Running 'composer install'..."
        if composer install; then
            echo -e "  ${GREEN}✓ PHP dependencies updated${NC}"
            deps_updated=1
        else
            echo -e "  ${RED}✗ Failed to update PHP dependencies${NC}"
        fi
    else
        echo -e "  ${YELLOW}⚠ Composer not found${NC}"
    fi
    echo ""
fi

# ============================================================================
# FINAL STATUS
# ============================================================================
if [ $deps_updated -eq 0 ]; then
    echo -e "${GREEN}✓ No dependency updates needed${NC}"
else
    echo -e "${GREEN}✅ Dependency updates complete${NC}"
fi

echo ""
exit 0
