#!/bin/bash

##############################################################################
# Script para subir archivos a cPanel vía RSYNC/SCP
# Uso: bash upload-to-cpanel.sh
##############################################################################

set -e

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

print_message() { echo -e "${BLUE}[INFO]${NC} $1"; }
print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
print_error() { echo -e "${RED}[ERROR]${NC} $1"; }

echo ""
echo "╔═══════════════════════════════════════════════════════════╗"
echo "║         📤 Upload to cPanel - Informados CV              ║"
echo "╚═══════════════════════════════════════════════════════════╝"
echo ""

# Configuración del servidor (EDITAR ESTOS VALORES)
read -p "Usuario cPanel: " CPANEL_USER
read -p "Dominio del servidor (ej: tudominio.com): " CPANEL_HOST
read -p "Puerto SSH (default: 22): " CPANEL_PORT
CPANEL_PORT=${CPANEL_PORT:-22}
REMOTE_PATH="/home/$CPANEL_USER/informados"

print_message "Configuración:"
echo "  Usuario: $CPANEL_USER"
echo "  Host: $CPANEL_HOST"
echo "  Puerto: $CPANEL_PORT"
echo "  Ruta remota: $REMOTE_PATH"
echo ""

read -p "¿La configuración es correcta? (s/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[SsYy]$ ]]; then
    print_error "Upload cancelado"
    exit 1
fi

##############################################################################
# Preparar archivos localmente
##############################################################################
print_message "Preparando archivos locales..."

# Compilar assets
print_message "Compilando assets de producción..."
npm run build || {
    print_error "Error al compilar assets"
    exit 1
}

# Crear directorio temporal de exclusiones
cat > .rsync-exclude <<EOF
.git/
.github/
node_modules/
storage/logs/*
storage/framework/cache/*
storage/framework/sessions/*
storage/framework/views/*
.env
.env.*
.DS_Store
Thumbs.db
*.log
.phpunit.result.cache
.vscode/
.idea/
*.sublime-*
.editorconfig
tests/
cypress/
Postman/
*.md
!README.md
!DEPLOYMENT_CPANEL.md
!ASSETS_DEPLOYMENT.md
deploy.sh
upload-to-cpanel.sh
docker-compose.yml
Dockerfile
.dockerignore
EOF

print_message "IMPORTANTE: Los assets compilados están en public/build/"
print_message "Asegúrate de que este directorio sea accesible públicamente"
echo ""

print_success "Archivos preparados"
echo ""

##############################################################################
# Subir archivos usando RSYNC
##############################################################################
print_message "Subiendo archivos al servidor..."
echo ""

if command -v rsync &> /dev/null; then
    print_message "Usando RSYNC para la transferencia (más rápido)..."

    rsync -avz --progress \
        --exclude-from='.rsync-exclude' \
        -e "ssh -p $CPANEL_PORT" \
        ./ "$CPANEL_USER@$CPANEL_HOST:$REMOTE_PATH/" || {
        print_error "Error al subir archivos con RSYNC"
        rm .rsync-exclude
        exit 1
    }

    print_success "Archivos subidos con RSYNC"
else
    print_warning "RSYNC no está disponible, usando SCP (más lento)..."

    # Comprimir archivos
    print_message "Comprimiendo archivos..."
    tar --exclude-from='.rsync-exclude' -czf informados-upload.tar.gz .

    # Subir archivo comprimido
    scp -P $CPANEL_PORT informados-upload.tar.gz "$CPANEL_USER@$CPANEL_HOST:~/"

    # Conectar y extraer
    print_message "Extrayendo archivos en el servidor..."
    ssh -p $CPANEL_PORT "$CPANEL_USER@$CPANEL_HOST" << 'ENDSSH'
        cd ~
        mkdir -p informados
        tar -xzf informados-upload.tar.gz -C informados/
        rm informados-upload.tar.gz
ENDSSH

    # Limpiar archivo local
    rm informados-upload.tar.gz

    print_success "Archivos subidos con SCP"
fi

# Limpiar archivo de exclusiones
rm .rsync-exclude

echo ""
##############################################################################
# Ejecutar comandos post-deployment en el servidor
##############################################################################
print_message "Ejecutando comandos de despliegue en el servidor..."
echo ""

ssh -p $CPANEL_PORT "$CPANEL_USER@$CPANEL_HOST" << 'ENDSSH'
    cd ~/informados

    echo "📦 Instalando dependencias de Composer..."
    composer install --optimize-autoloader --no-dev --no-interaction

    echo "🔧 Ajustando permisos..."
    chmod -R 775 storage bootstrap/cache

    echo "📝 Verificando .env..."
    if [ ! -f ".env" ]; then
        echo "⚠️  IMPORTANTE: No existe archivo .env"
        echo "   Debes crear uno basado en .env.example"
    fi

    echo "🔗 Creando storage link..."
    php artisan storage:link

    echo ""
    echo "✅ Comandos ejecutados correctamente"
    echo ""
    echo "📋 Próximos pasos MANUALES:"
    echo "  1. Configurar archivo .env con credenciales de producción"
    echo "  2. Generar APP_KEY: php artisan key:generate"
    echo "  3. Ejecutar migraciones: php artisan migrate --force"
    echo "  4. Configurar cron jobs para queue y schedule"
    echo "  5. Configurar DocumentRoot en cPanel"
    echo ""
ENDSSH

echo ""
print_success "¡Upload completado! 🎉"
echo ""
echo "📚 Consulta DEPLOYMENT_CPANEL.md para los siguientes pasos"
echo ""
