#!/usr/bin/env bash
# Pre-push hook: Optional local pipeline validation for .gitlab-ci.yml changes
# Part of satag-amicron-entity-bundle
set -euo pipefail

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

# Log functions
log_info() { echo -e "${BLUE}ℹ${NC} $*" >&2; }
log_success() { echo -e "${GREEN}✓${NC} $*" >&2; }
log_warn() { echo -e "${YELLOW}⚠${NC} $*" >&2; }
log_error() { echo -e "${RED}✗${NC} $*" >&2; }

# Check if .gitlab-ci.yml was modified in commits being pushed
if ! git diff --name-only origin/HEAD...HEAD 2>/dev/null | grep -q '\.gitlab-ci\.yml$'; then
    log_info "No GitLab CI configuration changes detected, skipping validation"
    exit 0
fi

log_warn "GitLab CI configuration modified in commits being pushed"
log_info "You can optionally run local pipeline validation"

# Check if gitlab-ci-local is available
if ! command -v gitlab-ci-local &> /dev/null; then
    log_warn "gitlab-ci-local not found (optional for local pipeline testing)"
    log_info "  Install: npm install -g gitlab-ci-local"
    log_info "  Or use: scripts/ci/gitlab-ci-local"
    exit 0
fi

# Ask if user wants to run local validation (only in interactive mode)
if [ -t 0 ]; then
    echo ""
    read -p "Run local pipeline validation? (y/N): " -n 1 -r
    echo ""
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        log_info "Skipping local pipeline validation"
        exit 0
    fi
    
    log_info "Running local pipeline validation (this may take a few minutes)..."
    if gitlab-ci-local --preview; then
        log_success "Local pipeline validation passed"
    else
        log_warn "Local pipeline validation failed"
        log_warn "Fix issues or push anyway (CI will catch them)"
        exit 0  # Don't block push, CI will handle it
    fi
else
    log_info "Non-interactive mode, skipping local pipeline validation"
fi

exit 0