#!/bin/bash

###############################################################################
# Script: send-to-cd-system.sh
# Descripción: Envía cambios reutilizables de catalogue a cd-system
#              Propaga demos completos, core y mejoras del sistema
#              Excluye assets y configuraciones específicas del proyecto
# Uso: ./scripts/send-to-cd-system.sh
###############################################################################

set -e

# Colores
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

# Configuración
PROJECT_NAME="catalogue"
CD_SYSTEM_PATH="/Applications/XAMPP/xamppfiles/htdocs/cd-system"
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PROJECT_NAME_AUTO=$(basename "$CURRENT_DIR")

# Detectar nombre del proyecto si no se proporciona
if [ -z "$PROJECT_NAME" ] || [ "$PROJECT_NAME" == "catalogue" ]; then
    PROJECT_NAME="$PROJECT_NAME_AUTO"
fi

echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}  📤 Enviando cambios reutilizables a cd-system${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${YELLOW}Proyecto origen:${NC} $PROJECT_NAME"
echo -e "${YELLOW}Directorio actual:${NC} $CURRENT_DIR"
echo -e "${YELLOW}cd-system path:${NC} $CD_SYSTEM_PATH"
echo ""

# Verificar que cd-system existe
if [ ! -d "$CD_SYSTEM_PATH" ]; then
    echo -e "${RED}❌ Error: No se encuentra cd-system en $CD_SYSTEM_PATH${NC}"
    exit 1
fi

# Verificar que estamos en la rama correcta
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$CURRENT_BRANCH" != "cd-system" ]; then
    echo -e "${YELLOW}⚠️  Advertencia: Estás en la rama '$CURRENT_BRANCH', no en 'cd-system'${NC}"
    read -p "¿Continuar de todos modos? (y/n): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        exit 1
    fi
fi

# ============================================================================
# IDENTIFICACIÓN AUTOMÁTICA DE ARCHIVOS
# ============================================================================

echo -e "${CYAN}🔍 Identificando archivos a propagar...${NC}"
echo ""

# 1. DEMOS COMPLETOS (TODO se propaga)
echo -e "${BLUE}📦 Demos completos:${NC}"
DEMO_DIRS=()
if [ -d "$CURRENT_DIR/public/cd-project/img/demos" ]; then
    for demo_dir in "$CURRENT_DIR/public/cd-project/img/demos"/*; do
        if [ -d "$demo_dir" ]; then
            demo_name=$(basename "$demo_dir")
            DEMO_DIRS+=("$demo_name")
            echo -e "  ${GREEN}✅${NC} demo: $demo_name"
        fi
    done
fi

# 2. VISTAS DE DEMOS
echo -e "${BLUE}📄 Vistas de demos:${NC}"
DEMO_VIEWS=()
if [ -d "$CURRENT_DIR/resources/views/layout/front/headers" ]; then
    for header in "$CURRENT_DIR/resources/views/layout/front/headers"/demo-*.blade.php; do
        if [ -f "$header" ]; then
            DEMO_VIEWS+=("resources/views/layout/front/headers/$(basename "$header")")
            echo -e "  ${GREEN}✅${NC} $(basename "$header")"
        fi
    done
fi

if [ -d "$CURRENT_DIR/resources/views/layout/front/footers" ]; then
    for footer in "$CURRENT_DIR/resources/views/layout/front/footers"/demo-*.blade.php; do
        if [ -f "$footer" ]; then
            DEMO_VIEWS+=("resources/views/layout/front/footers/$(basename "$footer")")
            echo -e "  ${GREEN}✅${NC} $(basename "$footer")"
        fi
    done
fi

# 3. CORE Y HELPERS
echo -e "${BLUE}🔧 Core y Helpers:${NC}"
CORE_FILES=(
    "app/Helpers/MetaTagsHelper.php"
    "app/helpers.php"
    "composer.json"
)

# 3.1. MEJORAS EN AUTH (reutilizables)
echo -e "${BLUE}🔐 Mejoras en Auth:${NC}"
AUTH_FILES=(
    "resources/views/auth/layout.blade.php"
    "resources/views/modules/cd-base/auth/layout.blade.php"
    "resources/views/modules/cd-base/auth/login.blade.php"
)

for file in "${AUTH_FILES[@]}"; do
    if [ -f "$CURRENT_DIR/$file" ]; then
        echo -e "  ${GREEN}✅${NC} $file"
    fi
done

for file in "${CORE_FILES[@]}"; do
    if [ -f "$CURRENT_DIR/$file" ]; then
        echo -e "  ${GREEN}✅${NC} $file"
    else
        echo -e "  ${YELLOW}⚠️${NC} $file (no encontrado)"
    fi
done

# 4. DOCUMENTACIÓN
echo -e "${BLUE}📚 Documentación:${NC}"
DOC_FILES=(
    "docs/meta-tags-management.md"
    "docs/FLUJO-CAMBIOS-BIDIRECCIONAL.md"
    "docs/bewpro/system/METODOLOGIA-PROPAGACION-DEMOS.md"
    "docs/bewpro/system/ENVIAR-CAMBIOS-A-CD-SYSTEM.md"
    "docs/bewpro/system/CAMBIOS-PARA-CD-SYSTEM.md"
    "docs/bewpro/system/VALIDACION-PROPAGACION.md"
    "docs/bewpro/system/PRODUCTO-CATALOGUE.md"
    "docs/bewpro/system/README.md"
)

for file in "${DOC_FILES[@]}"; do
    if [ -f "$CURRENT_DIR/$file" ]; then
        echo -e "  ${GREEN}✅${NC} $file"
    fi
done

# 5. MEJORAS EN MASTER.BLADE.PHP (requiere revisión manual)
MASTER_BLADE="resources/views/layout/front/master.blade.php"
if [ -f "$CURRENT_DIR/$MASTER_BLADE" ]; then
    echo -e "${BLUE}📄 Mejoras en master.blade.php:${NC}"
    echo -e "  ${YELLOW}⚠️${NC} $MASTER_BLADE (requiere revisión manual)"
fi

echo ""
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}  📋 Resumen de Archivos${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${GREEN}✅ Se propagarán:${NC}"
echo -e "  • ${#DEMO_DIRS[@]} demos completos (assets + vistas)"
echo -e "  • ${#DEMO_VIEWS[@]} vistas de demos"
echo -e "  • ${#CORE_FILES[@]} archivos core"
echo -e "  • ${#AUTH_FILES[@]} mejoras en auth"
echo -e "  • ${#DOC_FILES[@]} archivos de documentación"
echo ""
echo -e "${RED}❌ NO se propagarán:${NC}"
echo -e "  • Assets del proyecto (logos, favicons)"
echo -e "  • config/site.php (datos específicos)"
echo -e "  • config/cd-system.php (configuración del proyecto)"
echo ""

# ============================================================================
# PREPARACIÓN DE ARCHIVOS
# ============================================================================

TEMP_DIR=$(mktemp -d)
echo -e "${CYAN}📦 Preparando cambios en directorio temporal...${NC}"
echo -e "${YELLOW}   Directorio temporal:${NC} $TEMP_DIR"
echo ""

COPIED_COUNT=0

# Copiar demos completos
for demo_name in "${DEMO_DIRS[@]}"; do
    demo_path="public/cd-project/img/demos/$demo_name"
    if [ -d "$CURRENT_DIR/$demo_path" ]; then
        mkdir -p "$TEMP_DIR/$demo_path"
        cp -r "$CURRENT_DIR/$demo_path"/* "$TEMP_DIR/$demo_path/" 2>/dev/null || true
        echo -e "  ${GREEN}✅${NC} Demo assets: $demo_name"
        ((COPIED_COUNT++))
    fi
done

# Copiar vistas de demos
for view in "${DEMO_VIEWS[@]}"; do
    if [ -f "$CURRENT_DIR/$view" ]; then
        mkdir -p "$TEMP_DIR/$(dirname "$view")"
        cp "$CURRENT_DIR/$view" "$TEMP_DIR/$view"
        echo -e "  ${GREEN}✅${NC} Vista: $view"
        ((COPIED_COUNT++))
    fi
done

# Copiar archivos core
for file in "${CORE_FILES[@]}"; do
    if [ -f "$CURRENT_DIR/$file" ]; then
        mkdir -p "$TEMP_DIR/$(dirname "$file")"
        cp "$CURRENT_DIR/$file" "$TEMP_DIR/$file"
        echo -e "  ${GREEN}✅${NC} Core: $file"
        ((COPIED_COUNT++))
    fi
done

# Copiar mejoras en auth
for file in "${AUTH_FILES[@]}"; do
    if [ -f "$CURRENT_DIR/$file" ]; then
        mkdir -p "$TEMP_DIR/$(dirname "$file")"
        cp "$CURRENT_DIR/$file" "$TEMP_DIR/$file"
        echo -e "  ${GREEN}✅${NC} Auth: $file"
        ((COPIED_COUNT++))
    fi
done

# Copiar documentación
for file in "${DOC_FILES[@]}"; do
    if [ -f "$CURRENT_DIR/$file" ]; then
        mkdir -p "$TEMP_DIR/$(dirname "$file")"
        cp "$CURRENT_DIR/$file" "$TEMP_DIR/$file"
        echo -e "  ${GREEN}✅${NC} Doc: $file"
        ((COPIED_COUNT++))
    fi
done

# Copiar master.blade.php (requiere revisión)
if [ -f "$CURRENT_DIR/$MASTER_BLADE" ]; then
    mkdir -p "$TEMP_DIR/$(dirname "$MASTER_BLADE")"
    cp "$CURRENT_DIR/$MASTER_BLADE" "$TEMP_DIR/$MASTER_BLADE"
    echo -e "  ${YELLOW}⚠️${NC} $MASTER_BLADE (copiado, requiere revisión)"
    ((COPIED_COUNT++))
fi

echo ""
echo -e "${GREEN}✅ Total de archivos preparados: $COPIED_COUNT${NC}"
echo ""

# ============================================================================
# REVISIÓN DE CAMBIOS
# ============================================================================

echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}  🔍 Revisión de Cambios${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo ""

# Mostrar diferencias para archivos críticos
CRITICAL_FILES=(
    "app/Helpers/MetaTagsHelper.php"
    "app/helpers.php"
    "composer.json"
)

for file in "${CRITICAL_FILES[@]}"; do
    if [ -f "$CD_SYSTEM_PATH/$file" ] && [ -f "$TEMP_DIR/$file" ]; then
        echo -e "${YELLOW}📄 Diferencias en:${NC} $file"
        diff -u "$CD_SYSTEM_PATH/$file" "$TEMP_DIR/$file" || true
        echo ""
    fi
done

# Advertencia sobre master.blade.php
if [ -f "$TEMP_DIR/$MASTER_BLADE" ]; then
    echo -e "${YELLOW}⚠️  IMPORTANTE:${NC} Revisar $MASTER_BLADE manualmente"
    echo -e "   Debe contener solo mejoras reutilizables, NO datos específicos del proyecto"
    echo ""
fi

echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo ""
read -p "¿Deseas continuar y aplicar estos cambios a cd-system? (y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    echo -e "${YELLOW}❌ Operación cancelada${NC}"
    rm -rf "$TEMP_DIR"
    exit 0
fi

# ============================================================================
# APLICAR CAMBIOS A CD-SYSTEM
# ============================================================================

echo ""
echo -e "${CYAN}🔄 Cambiando a cd-system...${NC}"
cd "$CD_SYSTEM_PATH"

# Verificar que estamos en la rama cd-system
CURRENT_BRANCH_CD=$(git rev-parse --abbrev-ref HEAD)
if [ "$CURRENT_BRANCH_CD" != "cd-system" ]; then
    echo -e "${YELLOW}⚠️  Cambiando a rama cd-system...${NC}"
    git checkout cd-system || {
        echo -e "${RED}❌ Error: No se pudo cambiar a la rama cd-system${NC}"
        rm -rf "$TEMP_DIR"
        exit 1
    }
fi

# Aplicar cambios
echo ""
echo -e "${CYAN}📥 Aplicando cambios...${NC}"

# Copiar demos
for demo_name in "${DEMO_DIRS[@]}"; do
    demo_path="public/cd-project/img/demos/$demo_name"
    if [ -d "$TEMP_DIR/$demo_path" ]; then
        mkdir -p "$CD_SYSTEM_PATH/$demo_path"
        cp -r "$TEMP_DIR/$demo_path"/* "$CD_SYSTEM_PATH/$demo_path/" 2>/dev/null || true
        echo -e "  ${GREEN}✅${NC} Demo: $demo_name"
    fi
done

# Copiar vistas
for view in "${DEMO_VIEWS[@]}"; do
    if [ -f "$TEMP_DIR/$view" ]; then
        mkdir -p "$CD_SYSTEM_PATH/$(dirname "$view")"
        cp "$TEMP_DIR/$view" "$CD_SYSTEM_PATH/$view"
        echo -e "  ${GREEN}✅${NC} Vista: $view"
    fi
done

# Copiar core
for file in "${CORE_FILES[@]}"; do
    if [ -f "$TEMP_DIR/$file" ]; then
        mkdir -p "$CD_SYSTEM_PATH/$(dirname "$file")"
        cp "$TEMP_DIR/$file" "$CD_SYSTEM_PATH/$file"
        echo -e "  ${GREEN}✅${NC} Core: $file"
    fi
done

# Copiar mejoras en auth
for file in "${AUTH_FILES[@]}"; do
    if [ -f "$TEMP_DIR/$file" ]; then
        mkdir -p "$CD_SYSTEM_PATH/$(dirname "$file")"
        cp "$TEMP_DIR/$file" "$CD_SYSTEM_PATH/$file"
        echo -e "  ${GREEN}✅${NC} Auth: $file"
    fi
done

# Copiar documentación
for file in "${DOC_FILES[@]}"; do
    if [ -f "$TEMP_DIR/$file" ]; then
        mkdir -p "$CD_SYSTEM_PATH/$(dirname "$file")"
        cp "$TEMP_DIR/$file" "$CD_SYSTEM_PATH/$file"
        echo -e "  ${GREEN}✅${NC} Doc: $file"
    fi
done

# Copiar master.blade.php (con advertencia)
if [ -f "$TEMP_DIR/$MASTER_BLADE" ]; then
    mkdir -p "$CD_SYSTEM_PATH/$(dirname "$MASTER_BLADE")"
    cp "$TEMP_DIR/$MASTER_BLADE" "$CD_SYSTEM_PATH/$MASTER_BLADE"
    echo -e "  ${YELLOW}⚠️${NC} $MASTER_BLADE (aplicado, revisar manualmente)"
fi

# Limpiar directorio temporal
rm -rf "$TEMP_DIR"

# Mostrar estado de git
echo ""
echo -e "${CYAN}📊 Estado de cambios:${NC}"
git status --short

echo ""
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}  ✅ Confirmación Final${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${YELLOW}⚠️  IMPORTANTE:${NC}"
echo -e "  1. Revisa los cambios con: ${GREEN}git diff${NC}"
echo -e "  2. Verifica que ${YELLOW}config/site.php${NC} NO tenga datos específicos de $PROJECT_NAME"
echo -e "  3. Verifica que ${YELLOW}master.blade.php${NC} solo tenga mejoras reutilizables"
echo -e "  4. Verifica que los demos estén completos"
echo ""
read -p "¿Deseas hacer commit y push de estos cambios? (y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    echo -e "${YELLOW}ℹ️  Cambios aplicados pero NO commiteados.${NC}"
    echo -e "   Puedes revisarlos y commitear manualmente."
    exit 0
fi

# Commit
COMMIT_MSG="feat: Integrar mejoras desde $PROJECT_NAME

- Sistema de MetaTagsHelper centralizado
- Demos completos: ${DEMO_DIRS[*]}
- Mejoras en gestión de meta tags (SEO, OG, Twitter, JSON-LD)
- Documentación de meta tags management y metodología de propagación
- Actualización de composer.json con autoload de helpers

Proyecto origen: $PROJECT_NAME
Fecha: $(date '+%Y-%m-%d %H:%M:%S')"

echo ""
echo -e "${CYAN}💾 Haciendo commit...${NC}"
git add -A
git commit -m "$COMMIT_MSG" || {
    echo -e "${RED}❌ Error al hacer commit${NC}"
    exit 1
}

echo ""
echo -e "${CYAN}📤 ¿Deseas hacer push a origin/cd-system?${NC}"
read -p "Push a origin/cd-system? (y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
    echo -e "${CYAN}🚀 Haciendo push...${NC}"
    git push origin cd-system || {
        echo -e "${RED}❌ Error al hacer push${NC}"
        exit 1
    }
    echo -e "${GREEN}✅ Push completado exitosamente${NC}"
else
    echo -e "${YELLOW}ℹ️  Commit realizado pero NO pusheado.${NC}"
    echo -e "   Puedes hacer push manualmente con: ${GREEN}git push origin cd-system${NC}"
fi

echo ""
echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
echo -e "${GREEN}  ✅ Proceso completado${NC}"
echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
echo ""
echo -e "${BLUE}📋 Próximos pasos:${NC}"
echo -e "  1. Verificar que los cambios funcionan correctamente en cd-system"
echo -e "  2. Probar en un proyecto nuevo o existente"
echo -e "  3. Si todo está bien, propagar a otros proyectos con:"
echo -e "     ${GREEN}./scripts/propagate-core-improvements.sh <URL_REPO>${NC}"
echo ""
