    #!/bin/bash

# ========================================
# Script: validate-demo-update.sh
# Descripción: Valida que los cambios del demo pueden actualizarse de forma segura
# Uso: ./scripts/validate-demo-update.sh [demo-name]
# ========================================

set -euo pipefail

# Colores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color

DEMO_NAME="${1:-demo-architecture-2}"
PROJECT_PATH="${2:-}"

print_message() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

print_step() {
    echo -e "${BLUE}[STEP]${NC} $1"
}

print_success() {
    echo -e "${GREEN}[✓]${NC} $1"
}

# Verificar que estamos en cd-system
if [ ! -f "config/cd-system.php" ] || [ ! -d ".git" ]; then
    print_error "Este script debe ejecutarse desde el directorio cd-system"
    exit 1
fi

print_step "Validando cambios del demo: $DEMO_NAME"

# 1. Verificar archivos modificados del demo
print_step "1. Verificando archivos modificados del demo..."

DEMO_FILES=$(git diff HEAD~1 --name-only 2>/dev/null | grep -i "$DEMO_NAME" || true)

if [ -z "$DEMO_FILES" ]; then
    DEMO_FILES=$(git show HEAD --name-only --pretty=format:"" | grep -i "$DEMO_NAME" || true)
fi

if [ -z "$DEMO_FILES" ]; then
    print_warning "No se encontraron archivos del demo $DEMO_NAME en los últimos cambios"
else
    echo "Archivos del demo encontrados:"
    echo "$DEMO_FILES" | while read -r file; do
        echo "  - $file"
    done
fi

# 2. Verificar cambios en archivos protegidos (solo advertencia en cd-system)
print_step "2. Verificando cambios en archivos protegidos..."

PROTECTED_FILES=(
    "config/cd-system.php"
    "config/site.php"
    "public/cd-project/assets/logo.png"
    "public/cd-project/assets/logo-2.png"
    "public/cd-project/assets/logo-alternative.png"
)

PROTECTED_CHANGED=false
for file in "${PROTECTED_FILES[@]}"; do
    if git diff HEAD~1 --name-only 2>/dev/null | grep -q "^$file$" || \
       git show HEAD --name-only --pretty=format:"" | grep -q "^$file$"; then
        print_warning "⚠️  Archivo protegido modificado: $file"
        print_warning "   NOTA: En cd-system esto es normal (sistema base)"
        print_warning "   En proyectos, este archivo está protegido con merge=ours y NO se sobrescribirá"
        PROTECTED_CHANGED=true
    fi
done

if [ "$PROTECTED_CHANGED" = true ]; then
    print_message "ℹ️  Cambios en archivos protegidos detectados (normal en cd-system)"
    print_message "   Estos archivos NO se propagarán a proyectos gracias a .gitattributes"
else
    print_success "No hay cambios en archivos protegidos"
fi

# 3. Verificar estructura de archivos del demo
print_step "3. Verificando estructura del demo..."

DEMO_PATTERNS=(
    "resources/views/layout/front/headers/demo-*.blade.php"
    "resources/views/layout/front/footers/demo-*.blade.php"
    "public/template/css/demos/demo-*.css"
    "resources/views/modules/cd-base/frontend/demos/demo-*/**"
)

for pattern in "${DEMO_PATTERNS[@]}"; do
    if ls $pattern 2>/dev/null | grep -q "$DEMO_NAME"; then
        print_success "Estructura del demo verificada: $pattern"
    fi
done

# 4. Si se proporciona proyecto, validar sus protecciones
if [ -n "$PROJECT_PATH" ] && [ -d "$PROJECT_PATH" ]; then
    print_step "4. Validando protecciones en proyecto: $PROJECT_PATH"

    if [ -f "$PROJECT_PATH/.gitattributes" ]; then
        PROTECTIONS=$(grep -c "merge=ours" "$PROJECT_PATH/.gitattributes" || echo "0")
        if [ "$PROTECTIONS" -ge 2 ]; then
            print_success "Protecciones encontradas: $PROTECTIONS"
        else
            print_warning "Pocas protecciones encontradas en .gitattributes"
        fi
    else
        print_error ".gitattributes no encontrado en el proyecto"
        exit 1
    fi
fi

# 5. Resumen
print_step "5. Resumen de validación"
echo ""
print_success "Validación completada"
echo ""
echo "Archivos del demo que se actualizarán:"
echo "$DEMO_FILES" | while read -r file; do
    echo "  ✓ $file"
done
echo ""
print_message "Estos archivos son seguros para actualizar en proyectos"
print_message "Los archivos protegidos (config, assets) NO se sobrescribirán"

