#!/bin/bash

###############################################################################
# Script: verificar-propagacion.sh
# Descripción: Verifica que los cambios de un proyecto estén en cd-system
#              Compara proyecto vs cd-system y muestra diferencias
# Uso: ./scripts/verificar-propagacion.sh [proyecto]
###############################################################################

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

# Configuración
PROJECT_NAME="${1:-catalogue}"
PROJECT_PATH="/Applications/XAMPP/xamppfiles/htdocs/$PROJECT_NAME"
CD_SYSTEM_PATH="/Applications/XAMPP/xamppfiles/htdocs/cd-system"

echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}  🔍 Verificación de Propagación${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${YELLOW}Proyecto:${NC} $PROJECT_NAME"
echo -e "${YELLOW}cd-system:${NC} $CD_SYSTEM_PATH"
echo ""

# Verificar que existen los directorios
if [ ! -d "$PROJECT_PATH" ]; then
    echo -e "${RED}❌ Error: No se encuentra $PROJECT_PATH${NC}"
    exit 1
fi

if [ ! -d "$CD_SYSTEM_PATH" ]; then
    echo -e "${RED}❌ Error: No se encuentra $CD_SYSTEM_PATH${NC}"
    exit 1
fi

# ============================================================================
# VERIFICACIONES
# ============================================================================

echo -e "${CYAN}📋 Verificando propagación...${NC}"
echo ""

# 1. Archivos Core (deben estar iguales)
echo -e "${BLUE}1. Archivos Core:${NC}"
CORE_FILES=(
    "app/Helpers/MetaTagsHelper.php"
    "app/helpers.php"
    "resources/views/auth/layout.blade.php"
    "resources/views/modules/cd-base/auth/layout.blade.php"
    "resources/views/modules/cd-base/auth/login.blade.php"
)

ALL_CORE_OK=true
for file in "${CORE_FILES[@]}"; do
    if [ -f "$PROJECT_PATH/$file" ] && [ -f "$CD_SYSTEM_PATH/$file" ]; then
        if diff -q "$PROJECT_PATH/$file" "$CD_SYSTEM_PATH/$file" >/dev/null 2>&1; then
            echo -e "  ${GREEN}✅${NC} $file"
        else
            echo -e "  ${RED}❌${NC} $file (diferente)"
            ALL_CORE_OK=false
        fi
    elif [ -f "$PROJECT_PATH/$file" ]; then
        echo -e "  ${RED}❌${NC} $file (falta en cd-system)"
        ALL_CORE_OK=false
    fi
done

# 2. Archivos Excluidos (deben ser diferentes)
echo ""
echo -e "${BLUE}2. Archivos Excluidos (deben ser diferentes):${NC}"
EXCLUDED_FILES=(
    "config/site.php"
    "config/cd-system.php"
)

ALL_EXCLUDED_OK=true
for file in "${EXCLUDED_FILES[@]}"; do
    if [ -f "$PROJECT_PATH/$file" ] && [ -f "$CD_SYSTEM_PATH/$file" ]; then
        if diff -q "$PROJECT_PATH/$file" "$CD_SYSTEM_PATH/$file" >/dev/null 2>&1; then
            echo -e "  ${RED}❌${NC} $file (igual - debería ser diferente)"
            ALL_EXCLUDED_OK=false
        else
            echo -e "  ${GREEN}✅${NC} $file (diferente - correcto)"
        fi
    fi
done

# 3. Demos (deben estar completos en cd-system)
echo ""
echo -e "${BLUE}3. Demos:${NC}"
if [ -d "$PROJECT_PATH/public/cd-project/img/demos" ]; then
    DEMO_COUNT_PROJECT=$(find "$PROJECT_PATH/public/cd-project/img/demos" -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')
    DEMO_COUNT_CDSYSTEM=$(find "$CD_SYSTEM_PATH/public/cd-project/img/demos" -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')
    
    echo -e "  ${CYAN}Demos en proyecto:${NC} $DEMO_COUNT_PROJECT"
    echo -e "  ${CYAN}Demos en cd-system:${NC} $DEMO_COUNT_CDSYSTEM"
    
    if [ "$DEMO_COUNT_CDSYSTEM" -ge "$DEMO_COUNT_PROJECT" ]; then
        echo -e "  ${GREEN}✅${NC} Demos completos en cd-system"
    else
        echo -e "  ${RED}❌${NC} Faltan demos en cd-system"
    fi
fi

# 4. Assets del Proyecto (NO deben estar en cd-system)
echo ""
echo -e "${BLUE}4. Assets del Proyecto (NO deben estar en cd-system):${NC}"
PROJECT_ASSETS=(
    "public/cd-project/img/logos"
    "public/cd-project/img/favicon"
    "public/cd-project/assets"
)

ALL_ASSETS_OK=true
for asset in "${PROJECT_ASSETS[@]}"; do
    if [ -d "$PROJECT_PATH/$asset" ]; then
        # Verificar que los archivos del proyecto NO están en cd-system
        PROJECT_FILES=$(find "$PROJECT_PATH/$asset" -type f | wc -l | tr -d ' ')
        if [ "$PROJECT_FILES" -gt 0 ]; then
            # Comparar si hay archivos específicos del proyecto
            if [ -d "$CD_SYSTEM_PATH/$asset" ]; then
                CDSYSTEM_FILES=$(find "$CD_SYSTEM_PATH/$asset" -type f | wc -l | tr -d ' ')
                if [ "$CDSYSTEM_FILES" -eq "$PROJECT_FILES" ]; then
                    echo -e "  ${YELLOW}⚠️${NC}  $asset (mismo número de archivos - revisar)"
                else
                    echo -e "  ${GREEN}✅${NC} $asset (diferente - correcto)"
                fi
            else
                echo -e "  ${GREEN}✅${NC} $asset (no existe en cd-system - correcto)"
            fi
        fi
    fi
done

# 5. Documentación
echo ""
echo -e "${BLUE}5. Documentación:${NC}"
if [ -d "$PROJECT_PATH/docs/bewpro/system" ]; then
    DOC_COUNT_PROJECT=$(find "$PROJECT_PATH/docs/bewpro/system" -type f | wc -l | tr -d ' ')
    DOC_COUNT_CDSYSTEM=$(find "$CD_SYSTEM_PATH/docs/bewpro/system" -type f | wc -l | tr -d ' ')
    
    echo -e "  ${CYAN}Docs en proyecto:${NC} $DOC_COUNT_PROJECT"
    echo -e "  ${CYAN}Docs en cd-system:${NC} $DOC_COUNT_CDSYSTEM"
    
    if [ "$DOC_COUNT_CDSYSTEM" -ge "$DOC_COUNT_PROJECT" ]; then
        echo -e "  ${GREEN}✅${NC} Documentación completa en cd-system"
    else
        echo -e "  ${YELLOW}⚠️${NC}  Puede faltar documentación en cd-system"
    fi
fi

# ============================================================================
# RESUMEN
# ============================================================================

echo ""
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}  📊 Resumen${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo ""

if [ "$ALL_CORE_OK" = true ] && [ "$ALL_EXCLUDED_OK" = true ]; then
    echo -e "${GREEN}✅ Propagación correcta${NC}"
    echo -e "  • Archivos core propagados correctamente"
    echo -e "  • Archivos excluidos protegidos correctamente"
    exit 0
else
    echo -e "${RED}❌ Hay problemas en la propagación${NC}"
    if [ "$ALL_CORE_OK" = false ]; then
        echo -e "  • Algunos archivos core no están sincronizados"
    fi
    if [ "$ALL_EXCLUDED_OK" = false ]; then
        echo -e "  • Algunos archivos excluidos se propagaron incorrectamente"
    fi
    exit 1
fi

