#!/bin/bash

# ========================================
# Script: create-complete-project.sh
# Descripción: Crea un proyecto completo desde cero con configuración e identidad
#              Proceso optimizado y automatizado
#
# Uso:
#   ./create-complete-project.sh                    (modo interactivo)
#   ./create-complete-project.sh config.json       (modo JSON)
#
# Documentación:
#   Ver: docs/bewpro/system/README.md
#
# Requisitos:
#   - jq (para modo JSON): brew install jq
#   - Git, Composer, PHP 8.0+, MySQL
#
# Autor: Compañía Digital
# Versión: Noviembre 2024
# ========================================

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

# Funciones de output
print_header() {
    echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
    echo -e "${BOLD}${BLUE}$1${NC}"
    echo -e "${BLUE}═══════════════════════════════════════════════════════════${NC}"
}

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"
}

print_question() {
    echo -e "${CYAN}[?]${NC} $1"
}

# Verificar que estamos en cd-system
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CD_SYSTEM_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"

if [ ! -f "$CD_SYSTEM_DIR/artisan" ] || [ ! -d "$CD_SYSTEM_DIR/app" ]; then
    print_error "Este script debe ejecutarse desde el repositorio cd-system"
    exit 1
fi

PARENT_DIR="$(cd "$CD_SYSTEM_DIR/.." && pwd)"
CREATE_SCRIPT="$CD_SYSTEM_DIR/scripts/create-new-project.sh"

if [ ! -f "$CREATE_SCRIPT" ]; then
    print_error "No se encuentra el script create-new-project.sh"
    exit 1
fi

# Verificar si jq está instalado (para parsear JSON)
HAS_JQ=false
if command -v jq &> /dev/null; then
    HAS_JQ=true
fi

# Función para leer valor de JSON
read_json() {
    local key=$1
    local json_file=$2
    if [ "$HAS_JQ" = true ]; then
        jq -r "$key" "$json_file" 2>/dev/null
    else
        # Fallback básico sin jq (solo para valores simples)
        grep -o "\"$key\":[^,}]*" "$json_file" | sed 's/.*"\([^"]*\)".*/\1/' | head -1
    fi
}

# Función para leer valor anidado de JSON
read_json_nested() {
    local path=$1
    local json_file=$2
    if [ "$HAS_JQ" = true ]; then
        jq -r "$path" "$json_file" 2>/dev/null
    else
        print_warning "jq no está instalado. Instalación recomendada para usar archivos JSON."
        return 1
    fi
}

# Verificar si se pasó un archivo JSON
JSON_CONFIG=""
MODE="interactive"

if [ $# -gt 0 ] && [ -f "$1" ]; then
    JSON_CONFIG="$1"
    MODE="json"

    if [ "$HAS_JQ" = false ]; then
        print_error "jq no está instalado. Es necesario para usar archivos JSON."
        print_message "Instala jq con:"
        print_message "  macOS: brew install jq"
        print_message "  Linux: sudo apt-get install jq"
        exit 1
    fi

    # Validar que el JSON es válido
    if ! jq empty "$JSON_CONFIG" 2>/dev/null; then
        print_error "El archivo JSON no es válido: $JSON_CONFIG"
        exit 1
    fi

    print_success "Modo JSON activado. Leyendo configuración desde: $JSON_CONFIG"
fi

clear
print_header "🚀 Creación Completa de Proyecto CD-System"
echo ""

if [ "$MODE" = "json" ]; then
    print_message "Modo: ${CYAN}JSON (no interactivo)${NC}"
else
    print_message "Modo: ${CYAN}Interactivo${NC}"
    print_message "Este script creará un proyecto completo desde cero:"
    echo "  1. Crear repositorio y clonar CD-System"
    echo "  2. Configurar proyecto (composer, .env, migraciones)"
    echo "  3. Personalizar identidad (config/site.php, assets)"
    echo ""
fi

# ============================================
# FASE 1: RECOPILAR INFORMACIÓN
# ============================================
print_header "FASE 1: Información del Proyecto"

if [ "$MODE" = "json" ]; then
    # Leer desde JSON
    PROJECT_NAME=$(read_json_nested ".project.name" "$JSON_CONFIG")
    REPO_URL=$(read_json_nested ".project.repository_url" "$JSON_CONFIG")
    DB_NAME=$(read_json_nested ".project.database.name" "$JSON_CONFIG")
    IS_CPANEL=$(read_json_nested ".project.database.is_cpanel" "$JSON_CONFIG")
    DB_USER=$(read_json_nested ".project.database.username" "$JSON_CONFIG")
    DB_PASS=$(read_json_nested ".project.database.password" "$JSON_CONFIG")
    GA_ID=$(read_json_nested ".project.database.google_analytics_id" "$JSON_CONFIG")

    SITE_NAME=$(read_json_nested ".identity.site_name" "$JSON_CONFIG")
    SITE_URL=$(read_json_nested ".identity.site_url" "$JSON_CONFIG")
    CONTACT_EMAIL=$(read_json_nested ".identity.contact_email" "$JSON_CONFIG")
    SEO_DESCRIPTION=$(read_json_nested ".identity.seo_description" "$JSON_CONFIG")
    AUTHOR=$(read_json_nested ".identity.author" "$JSON_CONFIG")

    HAS_ASSETS=$(read_json_nested ".assets.has_assets" "$JSON_CONFIG")
    ASSETS_DIR=$(read_json_nested ".assets.assets_path" "$JSON_CONFIG")
    UPDATE_ASSETS=$(read_json_nested ".assets.update_assets" "$JSON_CONFIG")
    CREATE_BACKUP=$(read_json_nested ".assets.create_backup" "$JSON_CONFIG")
    AUTO_DETECT_ASSETS=$(read_json_nested ".assets.auto_detect" "$JSON_CONFIG")

    DEMO=$(read_json_nested ".system.demo" "$JSON_CONFIG")
    MODULES_JSON=$(read_json_nested ".system.modules" "$JSON_CONFIG")

    SKIP_PUSH=$(read_json_nested ".options.skip_push" "$JSON_CONFIG")
    SKIP_VERIFICATION=$(read_json_nested ".options.skip_verification" "$JSON_CONFIG")

    # Validar campos requeridos
    if [ -z "$PROJECT_NAME" ] || [ "$PROJECT_NAME" = "null" ]; then
        print_error "El campo 'project.name' es requerido en el JSON"
        exit 1
    fi

    # Valores por defecto
    REPO_URL=${REPO_URL:-"https://github.com/LACOMPANIADIGITAL/$PROJECT_NAME.git"}
    DB_NAME=${DB_NAME:-"bewpro-$PROJECT_NAME"}
    IS_CPANEL=${IS_CPANEL:-false}
    SITE_NAME=${SITE_NAME:-$PROJECT_NAME}
    SITE_URL=${SITE_URL:-"www.$PROJECT_NAME.com"}
    CONTACT_EMAIL=${CONTACT_EMAIL:-"contacto@$PROJECT_NAME.com"}
    SEO_DESCRIPTION=${SEO_DESCRIPTION:-"Sitio web de $SITE_NAME"}
    AUTHOR=${AUTHOR:-$SITE_NAME}
    HAS_ASSETS=${HAS_ASSETS:-false}
    ASSETS_DIR=${ASSETS_DIR:-"public/cd-project/assets"}
    UPDATE_ASSETS=${UPDATE_ASSETS:-true}
    CREATE_BACKUP=${CREATE_BACKUP:-true}
    AUTO_DETECT_ASSETS=${AUTO_DETECT_ASSETS:-true}
    DEMO=${DEMO:-"demo-construction"}
    MODULES_JSON=${MODULES_JSON:-"{}"}

    if [ "$IS_CPANEL" = "true" ]; then
        CPANEL="s"
    else
        CPANEL="n"
    fi

    print_success "Configuración cargada desde JSON"
else
    # Modo interactivo (código original)
    print_question "Nombre del proyecto (ej: pedroweb, cokecolombres):"
    read -p "> " PROJECT_NAME

    if [ -z "$PROJECT_NAME" ]; then
        print_error "El nombre del proyecto no puede estar vacío"
        exit 1
    fi

    if [[ ! "$PROJECT_NAME" =~ ^[a-zA-Z0-9_-]+$ ]]; then
        print_error "El nombre solo puede contener letras, números, guiones y guiones bajos"
        exit 1
    fi

    PROJECT_REPO="https://github.com/LACOMPANIADIGITAL/$PROJECT_NAME.git"
    print_question "URL del repositorio en GitHub:"
    print_message "Por defecto: ${CYAN}$PROJECT_REPO${NC}"
    read -p "Presiona Enter para usar el default o ingresa una URL diferente: " REPO_URL
    REPO_URL=${REPO_URL:-$PROJECT_REPO}

    print_question "Nombre de la base de datos:"
    read -p "> " DB_NAME
    DB_NAME=${DB_NAME:-"bewpro-$PROJECT_NAME"}

    IS_CPANEL=false
    if [ -d "/opt/cpanel" ] || [ -d "/usr/local/cpanel" ] || [ -f "/etc/cpanel" ]; then
        IS_CPANEL=true
        CPANEL="s"
        print_success "cPanel detectado automáticamente"
    else
        print_question "¿Estás en cPanel? (s/n):"
        read -p "> " CPANEL
    fi

    if [[ "$CPANEL" == "s" ]]; then
        print_question "Usuario de la base de datos:"
        read -p "> " DB_USER
        print_question "Contraseña de la base de datos:"
        read -s -p "> " DB_PASS
        echo
        print_question "Google Analytics ID (opcional):"
        read -p "> " GA_ID
    fi

    echo ""
    print_header "FASE 2: Identidad del Proyecto"
    print_message "Configuración básica de identidad (puedes cambiar después):"

    print_question "Nombre del sitio (ej: Mi Empresa):"
    read -p "> " SITE_NAME
    SITE_NAME=${SITE_NAME:-$PROJECT_NAME}

    print_question "URL del sitio (ej: www.miempresa.com):"
    read -p "> " SITE_URL
    SITE_URL=${SITE_URL:-"www.$PROJECT_NAME.com"}

    print_question "Email de contacto:"
    read -p "> " CONTACT_EMAIL
    CONTACT_EMAIL=${CONTACT_EMAIL:-"contacto@$PROJECT_NAME.com"}

    print_question "Descripción SEO (opcional):"
    read -p "> " SEO_DESCRIPTION
    SEO_DESCRIPTION=${SEO_DESCRIPTION:-"Sitio web de $SITE_NAME"}

    AUTHOR=$SITE_NAME

    echo ""
    print_question "¿Tienes assets listos para el proyecto? (s/n):"
    read -p "> " HAS_ASSETS

    ASSETS_DIR=""
    UPDATE_ASSETS=true
    CREATE_BACKUP=true

    if [[ "$HAS_ASSETS" == "s" ]]; then
        print_question "Ruta a la carpeta con los assets (logos, favicons):"
        print_message "Ejemplo: /ruta/a/mis/assets o presiona Enter para usar public/cd-project/assets/"
        read -p "> " ASSETS_DIR
        ASSETS_DIR=${ASSETS_DIR:-"public/cd-project/assets"}
    else
        HAS_ASSETS="n"
    fi

    SKIP_PUSH=false
    SKIP_VERIFICATION=false
fi

# Resumen
echo ""
print_header "Resumen de Configuración"
echo ""
echo -e "${CYAN}Proyecto:${NC} $PROJECT_NAME"
echo -e "${CYAN}Repositorio:${NC} $REPO_URL"
echo -e "${CYAN}Base de datos:${NC} $DB_NAME"
echo -e "${CYAN}Directorio:${NC} $PARENT_DIR/$PROJECT_NAME"
echo ""
echo -e "${CYAN}Identidad:${NC}"
echo "  - Nombre: $SITE_NAME"
echo "  - URL: $SITE_URL"
echo "  - Email: $CONTACT_EMAIL"
echo ""
if [[ "$HAS_ASSETS" == "s" ]] || [ "$HAS_ASSETS" = "true" ]; then
    echo -e "${CYAN}Assets:${NC} $ASSETS_DIR"
fi
echo ""

if [ "$MODE" = "interactive" ]; then
    read -p "¿Continuar con la creación? (y/N): " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        print_message "Operación cancelada"
        exit 0
    fi
fi

# ============================================
# FASE 2: CREAR PROYECTO
# ============================================
print_header "FASE 2: Creando Proyecto"

PROJECT_DIR="$PARENT_DIR/$PROJECT_NAME"

# Verificar si existe
if [ -d "$PROJECT_DIR" ]; then
    if [ "$MODE" = "json" ]; then
        print_warning "El directorio ya existe: $PROJECT_DIR"
        print_message "Eliminando directorio existente..."
        rm -rf "$PROJECT_DIR"
        print_success "Directorio eliminado"
    else
        print_warning "El directorio ya existe: $PROJECT_DIR"
        read -p "¿Eliminar y empezar de nuevo? (y/N): " -n 1 -r
        echo
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            print_step "Eliminando directorio existente..."
            rm -rf "$PROJECT_DIR"
            print_success "Directorio eliminado"
        else
            print_message "Operación cancelada"
            exit 0
        fi
    fi
fi

# Ejecutar script de creación
print_step "Ejecutando creación del proyecto..."
cd "$CD_SYSTEM_DIR"

# Crear JSON temporal mínimo para create-new-project.sh
TEMP_JSON=$(mktemp)
cat > "$TEMP_JSON" <<EOF
{
  "project": {
    "name": "$PROJECT_NAME",
    "repository_url": "$REPO_URL",
    "branch": "cd-system"
  },
  "assets": {
    "has_assets": $(if [[ "$HAS_ASSETS" == "s" ]] || [ "$HAS_ASSETS" = "true" ]; then echo "true"; else echo "false"; fi),
    "assets_path": "$ASSETS_DIR"
  }
}
EOF

# Usar modo JSON de create-new-project.sh
"$CREATE_SCRIPT" --json "$TEMP_JSON"

if [ $? -ne 0 ]; then
    print_error "Error al crear el proyecto"
    rm -f "$TEMP_JSON"
    exit 1
fi

rm -f "$TEMP_JSON"
print_success "Proyecto creado"

# ============================================
# FASE 3: CONFIGURAR PROYECTO
# ============================================
print_header "FASE 3: Configurando Proyecto"

cd "$PROJECT_DIR" || exit 1

# Verificar que composer esté disponible
if ! command -v composer &> /dev/null; then
    print_error "Composer no está instalado"
    exit 1
fi

# Ejecutar setup_cd_project.sh con respuestas automáticas
print_step "Ejecutando setup del proyecto..."

SETUP_SCRIPT="$PROJECT_DIR/scripts/setup_cd_project.sh"
if [ ! -f "$SETUP_SCRIPT" ]; then
    print_error "No se encuentra setup_cd_project.sh"
    exit 1
fi

chmod +x "$SETUP_SCRIPT"

# Crear input temporal para setup
TEMP_SETUP_INPUT=$(mktemp)
{
    echo "$PROJECT_NAME"
    echo "$DB_NAME"
    # CPANEL se pasa como variable de entorno para evitar problemas de sincronización
    if [[ "$CPANEL" == "s" ]]; then
        echo "$DB_USER"
        echo "$DB_PASS"
        echo "$GA_ID"
    fi
} > "$TEMP_SETUP_INPUT"

# Pasar CPANEL como variable de entorno
export CPANEL="$CPANEL"
"$SETUP_SCRIPT" < "$TEMP_SETUP_INPUT"

if [ $? -ne 0 ]; then
    print_error "Error durante el setup del proyecto"
    rm -f "$TEMP_SETUP_INPUT"
    exit 1
fi

rm -f "$TEMP_SETUP_INPUT"
print_success "Proyecto configurado"

# ============================================
# FASE 4: PERSONALIZAR IDENTIDAD
# ============================================
print_header "FASE 4: Personalizando Identidad"

# Actualizar config/site.php usando comando artisan
print_step "Actualizando config/site.php..."

if [ -f "config/site.php" ]; then
    # Verificar si el comando existe, si no, copiarlo desde cd-system
    if ! php artisan list 2>/dev/null | grep -q "project:customize-identity"; then
        print_warning "Comando project:customize-identity no encontrado, copiando desde cd-system..."

        # Copiar el comando si no existe
        if [ -f "$CD_SYSTEM_DIR/app/Console/Commands/CustomizeProjectIdentity.php" ]; then
            mkdir -p app/Console/Commands
            cp "$CD_SYSTEM_DIR/app/Console/Commands/CustomizeProjectIdentity.php" app/Console/Commands/

            # Actualizar Kernel.php para registrar el comando
            if [ -f "app/Console/Kernel.php" ]; then
                # Verificar si ya está registrado
                if ! grep -q "CustomizeProjectIdentity" app/Console/Kernel.php; then
                    # Agregar el comando al array
                    if [[ "$OSTYPE" == "darwin"* ]]; then
                        sed -i '' '/Commands\\UpdateProjectAssets::class,/a\
        Commands\\CustomizeProjectIdentity::class,
' app/Console/Kernel.php
                    else
                        sed -i '/Commands\\UpdateProjectAssets::class,/a\        Commands\\CustomizeProjectIdentity::class,' app/Console/Kernel.php
                    fi
                fi
            fi

            print_success "Comando copiado y registrado"
        else
            print_warning "No se encontró el comando en cd-system, usando método alternativo"
        fi
    fi

    # Ejecutar el comando de personalización
    if php artisan list 2>/dev/null | grep -q "project:customize-identity"; then
        php artisan project:customize-identity \
            --name="$SITE_NAME" \
            --url="$SITE_URL" \
            --email="$CONTACT_EMAIL" \
            --description="$SEO_DESCRIPTION" \
            --author="$AUTHOR" 2>&1 | grep -E "(✅|❌|📦|actualizado)" || true

        print_success "config/site.php actualizado"
    else
        # Método alternativo: editar directamente con sed
        print_warning "Usando método alternativo para actualizar config/site.php..."

        if [[ "$OSTYPE" == "darwin"* ]]; then
            sed -i '' "s/'name' => 'CD-System Base'/'name' => '$SITE_NAME'/" config/site.php
            sed -i '' "s/'url' => 'www.cd-system.com'/'url' => '$SITE_URL'/" config/site.php
            sed -i '' "s/'author' => 'Compañía Digital'/'author' => '$AUTHOR'/" config/site.php
            sed -i '' "s/'description' => 'CD-System Base[^']*'/'description' => '$SEO_DESCRIPTION'/" config/site.php
            sed -i '' "s/'email' => 'info@companiadigital.com'/'email' => '$CONTACT_EMAIL'/" config/site.php
        else
            sed -i "s/'name' => 'CD-System Base'/'name' => '$SITE_NAME'/" config/site.php
            sed -i "s/'url' => 'www.cd-system.com'/'url' => '$SITE_URL'/" config/site.php
            sed -i "s/'author' => 'Compañía Digital'/'author' => '$AUTHOR'/" config/site.php
            sed -i "s/'description' => 'CD-System Base[^']*'/'description' => '$SEO_DESCRIPTION'/" config/site.php
            sed -i "s/'email' => 'info@companiadigital.com'/'email' => '$CONTACT_EMAIL'/" config/site.php
        fi

        print_success "config/site.php actualizado (método alternativo)"
    fi
else
    print_warning "No se encontró config/site.php"
fi

# Actualizar config/cd-system.php (demo y módulos)
print_step "Configurando demo y módulos en config/cd-system.php..."

if [ -f "config/cd-system.php" ]; then
    # Verificar si el comando existe, si no, copiarlo desde cd-system
    if ! php artisan list 2>/dev/null | grep -q "project:configure-modules"; then
        print_warning "Comando project:configure-modules no encontrado, copiando desde cd-system..."

        # Copiar el comando si no existe
        if [ -f "$CD_SYSTEM_DIR/app/Console/Commands/ConfigureProjectModules.php" ]; then
            mkdir -p app/Console/Commands
            cp "$CD_SYSTEM_DIR/app/Console/Commands/ConfigureProjectModules.php" app/Console/Commands/

            # Actualizar Kernel.php para registrar el comando
            if [ -f "app/Console/Kernel.php" ]; then
                # Verificar si ya está registrado
                if ! grep -q "ConfigureProjectModules" app/Console/Kernel.php; then
                    # Agregar el comando al array
                    if [[ "$OSTYPE" == "darwin"* ]]; then
                        sed -i '' '/Commands\\CustomizeProjectIdentity::class,/a\
        Commands\\ConfigureProjectModules::class,
' app/Console/Kernel.php
                    else
                        sed -i '/Commands\\CustomizeProjectIdentity::class,/a\        Commands\\ConfigureProjectModules::class,' app/Console/Kernel.php
                    fi
                fi
            fi

            print_success "Comando copiado y registrado"
        else
            print_warning "No se encontró el comando en cd-system, usando método alternativo"
        fi
    fi

    # Preparar argumentos para el comando
    CMD_ARGS=""

    if [ -n "$DEMO" ] && [ "$DEMO" != "null" ]; then
        CMD_ARGS="--demo=\"$DEMO\""
    fi

    if [ -n "$MODULES_JSON" ] && [ "$MODULES_JSON" != "null" ] && [ "$MODULES_JSON" != "{}" ]; then
        # Convertir el JSON de módulos a formato de línea para el comando
        # Escapar comillas dobles y eliminar saltos de línea
        MODULES_JSON_ESCAPED=$(echo "$MODULES_JSON" | sed 's/"/\\"/g' | tr -d '\n' | tr -d ' ')
        if [ -n "$CMD_ARGS" ]; then
            CMD_ARGS="$CMD_ARGS --modules=\"$MODULES_JSON_ESCAPED\""
        else
            CMD_ARGS="--modules=\"$MODULES_JSON_ESCAPED\""
        fi
    fi

    # Ejecutar el comando si hay algo que configurar
    if [ -n "$CMD_ARGS" ]; then
        if php artisan list 2>/dev/null | grep -q "project:configure-modules"; then
            # Ejecutar el comando
            eval "php artisan project:configure-modules $CMD_ARGS" 2>&1 | grep -E "(✅|❌|📦|actualizado|activado|desactivado)" || true

            print_success "config/cd-system.php actualizado"
        else
            # Método alternativo: usar sed directamente
            print_warning "Usando método alternativo para actualizar config/cd-system.php..."

            if [ -n "$DEMO" ] && [ "$DEMO" != "null" ]; then
                if [[ "$OSTYPE" == "darwin"* ]]; then
                    sed -i '' "s/'demo' => '[^']*'/'demo' => '$DEMO'/" config/cd-system.php
                else
                    sed -i "s/'demo' => '[^']*'/'demo' => '$DEMO'/" config/cd-system.php
                fi
                print_success "Demo actualizado: $DEMO"
            fi

            # Actualizar módulos con sed (método alternativo)
            if [ -n "$MODULES_JSON" ] && [ "$MODULES_JSON" != "null" ] && [ "$MODULES_JSON" != "{}" ]; then
                # Parsear módulos y actualizar uno por uno usando jq
                if command -v jq &> /dev/null; then
                    for module in $(echo "$MODULES_JSON" | jq -r 'to_entries[] | "\(.key):\(.value)"'); do
                        MODULE_NAME=$(echo "$module" | cut -d: -f1)
                        MODULE_ACTIVE=$(echo "$module" | cut -d: -f2)

                        if [ "$MODULE_ACTIVE" = "true" ]; then
                            ACTIVE_VALUE="true"
                        else
                            ACTIVE_VALUE="false"
                        fi

                        # Buscar y reemplazar el estado del módulo usando sed con rango
                        if [[ "$OSTYPE" == "darwin"* ]]; then
                            # macOS: buscar desde 'module_name' hasta encontrar 'active' y reemplazar
                            sed -i '' "/'$MODULE_NAME'/,/)/ s/'active' => true/'active' => $ACTIVE_VALUE/" config/cd-system.php
                            sed -i '' "/'$MODULE_NAME'/,/)/ s/'active' => false/'active' => $ACTIVE_VALUE/" config/cd-system.php
                        else
                            sed -i "/'$MODULE_NAME'/,/)/ s/'active' => true/'active' => $ACTIVE_VALUE/" config/cd-system.php
                            sed -i "/'$MODULE_NAME'/,/)/ s/'active' => false/'active' => $ACTIVE_VALUE/" config/cd-system.php
                        fi
                    done
                    print_success "Módulos actualizados"
                else
                    print_warning "jq no está instalado, no se pueden actualizar módulos automáticamente"
                fi
            fi
        fi
    else
        print_message "Demo y módulos no especificados, usando valores por defecto"
    fi
else
    print_warning "No se encontró config/cd-system.php"
fi

# Actualizar assets si se proporcionaron
ASSETS_UPDATED=false

if [[ "$HAS_ASSETS" == "s" ]] || [ "$HAS_ASSETS" = "true" ]; then
    if [ "$UPDATE_ASSETS" = "true" ]; then
        print_step "Procesando assets del proyecto..."

        # Determinar si es ruta absoluta (externa) o relativa (dentro del proyecto)
        SOURCE_ASSETS_DIR=""
        TARGET_ASSETS_DIR="$PROJECT_DIR/public/cd-project/assets"

        # Normalizar ruta de assets fuente
        if [[ "$ASSETS_DIR" == /* ]]; then
            # Ruta absoluta (externa) - copiar desde aquí
            SOURCE_ASSETS_DIR="$ASSETS_DIR"
        else
            # Ruta relativa - puede ser dentro del proyecto o relativa al script
            if [ -d "$PROJECT_DIR/$ASSETS_DIR" ]; then
                SOURCE_ASSETS_DIR="$PROJECT_DIR/$ASSETS_DIR"
            elif [ -d "$ASSETS_DIR" ]; then
                SOURCE_ASSETS_DIR="$ASSETS_DIR"
            else
                SOURCE_ASSETS_DIR=""
            fi
        fi

        if [ -n "$SOURCE_ASSETS_DIR" ] && [ -d "$SOURCE_ASSETS_DIR" ]; then
            # Verificar si hay assets en la fuente
            ASSET_COUNT=0
            for asset in logo.png logo-2.png favicon.ico; do
                if [ -f "$SOURCE_ASSETS_DIR/$asset" ]; then
                    ASSET_COUNT=$((ASSET_COUNT + 1))
                fi
            done

            if [ $ASSET_COUNT -ge 1 ]; then
                # Crear directorio destino si no existe
                mkdir -p "$TARGET_ASSETS_DIR"

                # Si la fuente es externa, copiar assets al proyecto
                if [ "$SOURCE_ASSETS_DIR" != "$TARGET_ASSETS_DIR" ]; then
                    print_message "   Copiando assets desde: ${CYAN}$SOURCE_ASSETS_DIR${NC}"
                    print_message "   Hacia: ${CYAN}$TARGET_ASSETS_DIR${NC}"

                    # Copiar solo los archivos de assets (no subdirectorios)
                    cp "$SOURCE_ASSETS_DIR"/*.png "$TARGET_ASSETS_DIR/" 2>/dev/null || true
                    cp "$SOURCE_ASSETS_DIR"/*.ico "$TARGET_ASSETS_DIR/" 2>/dev/null || true
                    cp "$SOURCE_ASSETS_DIR"/*.svg "$TARGET_ASSETS_DIR/" 2>/dev/null || true
                    cp "$SOURCE_ASSETS_DIR"/*.css "$TARGET_ASSETS_DIR/" 2>/dev/null || true

                    print_success "Assets copiados al proyecto"
                fi

                # Actualizar assets usando el comando artisan
                print_message "   Actualizando assets en ubicaciones finales..."

                BACKUP_FLAG=""
                if [ "$CREATE_BACKUP" = "true" ]; then
                    BACKUP_FLAG="--backup"
                fi

                cd "$PROJECT_DIR"
                php artisan project:update-assets "$TARGET_ASSETS_DIR" $BACKUP_FLAG --project="$PROJECT_NAME"

                if [ $? -eq 0 ]; then
                    print_success "Assets actualizados correctamente"
                    ASSETS_UPDATED=true
                else
                    print_warning "Hubo problemas al actualizar assets, pero el proyecto está listo"
                fi
            else
                print_warning "No se encontraron assets válidos en: $SOURCE_ASSETS_DIR"
            fi
        else
            print_warning "No se encontró el directorio de assets: $ASSETS_DIR"
            print_message "   Verifica que la ruta sea correcta (absoluta o relativa al proyecto)"
        fi
    fi
else
    # Auto-detectar assets en public/cd-project/assets/ si auto_detect está habilitado
    # (Útil si alguien copió assets manualmente antes de ejecutar)
    if [ "$AUTO_DETECT_ASSETS" = "true" ]; then
        DEFAULT_ASSETS_DIR="$PROJECT_DIR/public/cd-project/assets"

        if [ -d "$DEFAULT_ASSETS_DIR" ]; then
            # Verificar si hay al menos algunos assets requeridos
            REQUIRED_COUNT=0
            for asset in logo.png logo-2.png favicon.ico; do
                if [ -f "$DEFAULT_ASSETS_DIR/$asset" ]; then
                    REQUIRED_COUNT=$((REQUIRED_COUNT + 1))
                fi
            done

            if [ $REQUIRED_COUNT -ge 2 ]; then
                print_step "Assets detectados automáticamente en public/cd-project/assets/"
                print_message "   Actualizando automáticamente..."

                cd "$PROJECT_DIR"
                php artisan project:update-assets "$DEFAULT_ASSETS_DIR" --backup --project="$PROJECT_NAME"

                if [ $? -eq 0 ]; then
                    print_success "Assets actualizados automáticamente"
                    ASSETS_UPDATED=true
                else
                    print_warning "No se pudieron actualizar los assets automáticamente"
                fi
            fi
        fi
    fi
fi

if [ "$ASSETS_UPDATED" = false ]; then
    print_message ""
    print_message "Assets no proporcionados o no actualizados."
    print_message "Puedes actualizarlos después con:"
    print_message "  cd $PROJECT_NAME"
    print_message "  ./scripts/update-project-assets.sh [ruta-a-assets]"
    print_message "  # O directamente:"
    print_message "  php artisan project:update-assets public/cd-project/assets --backup"
fi

# ============================================
# FASE 5: VERIFICACIÓN FINAL
# ============================================
if [ "$SKIP_VERIFICATION" != "true" ]; then
    print_header "FASE 5: Verificación Final"

    print_step "Verificando estado del proyecto..."

    # Verificar rama
    CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
    if [ "$CURRENT_BRANCH" == "cd-system" ]; then
        print_success "Rama cd-system activa"
    else
        print_warning "Rama actual: $CURRENT_BRANCH"
    fi

    # Verificar .gitattributes
    if [ -f ".gitattributes" ] && grep -q "merge=ours" .gitattributes; then
        PROTECTION_COUNT=$(grep -c "merge=ours" .gitattributes)
        print_success ".gitattributes con $PROTECTION_COUNT protecciones"
    else
        print_warning ".gitattributes no configurado correctamente"
    fi

    # Verificar archivos críticos
    CRITICAL_FILES=("config/cd-system.php" "config/site.php" ".env")
    MISSING=0
    for file in "${CRITICAL_FILES[@]}"; do
        if [ -f "$file" ]; then
            print_success "$file existe"
        else
            print_warning "$file faltante"
            MISSING=$((MISSING + 1))
        fi
    done
fi

# ============================================
# RESUMEN FINAL
# ============================================
print_header "✅ Proyecto Creado Exitosamente"

echo ""
echo -e "${GREEN}Proyecto:${NC} $PROJECT_NAME"
echo -e "${GREEN}Directorio:${NC} $PROJECT_DIR"
echo -e "${GREEN}Repositorio:${NC} $REPO_URL"
echo ""

print_message "Próximos pasos:"
echo ""
echo "  1. Navegar al proyecto:"
echo "     ${CYAN}cd $PROJECT_DIR${NC}"
echo ""

if [ "$SKIP_PUSH" != "true" ]; then
    echo "  2. Push inicial (opcional):"
    echo "     ${CYAN}git push -u origin cd-system${NC}"
    echo ""
fi

echo "  3. Iniciar servidor de desarrollo:"
echo "     ${CYAN}php artisan serve${NC}"
echo ""
echo "  4. Acceder al sitio:"
echo "     ${CYAN}http://127.0.0.1:8000${NC}"
echo ""
echo "  5. Credenciales de acceso:"
echo "     ${CYAN}Email:${NC} admin@$PROJECT_NAME.com"
echo "     ${CYAN}Password:${NC} password"
echo ""

if [[ "$HAS_ASSETS" != "s" ]] && [ "$HAS_ASSETS" != "true" ]; then
    echo "  6. Actualizar assets cuando estén listos:"
    echo "     ${CYAN}php artisan project:update-assets public/cd-project/assets --backup${NC}"
    echo ""
fi

print_message "═══════════════════════════════════════════════════════════"
echo ""
