#!/bin/bash
# 🚀 NETGESCON - MIGRAZIONE COMPLETA A VM MASTER
# Creato: 19/07/2025 - Migrazione da Windows WSL a VM Linux

set -e

echo "🚀 === NETGESCON - MIGRAZIONE COMPLETA A VM MASTER ==="
echo "📅 $(date '+%Y-%m-%d %H:%M:%S')"
echo ""

# === CONFIGURAZIONI ===
SOURCE_PATH="/home/michele/netgescon"
TARGET_SERVER="192.168.0.200"
TARGET_USER="michele"
TARGET_PATH="/home/michele/netgescon"
SSH_TARGET="$TARGET_USER@$TARGET_SERVER"

echo "📋 Configurazione migrazione:"
echo "   Origine: $SOURCE_PATH (Windows WSL)"
echo "   Destinazione: $SSH_TARGET:$TARGET_PATH"
echo "   Server Master: $TARGET_SERVER"
echo ""

# === STEP 1: VERIFICA CONNESSIONE ===
echo "🔍 STEP 1: Verifica connessione e sistema target..."

if ! ssh -o ConnectTimeout=10 "$SSH_TARGET" "echo 'Connessione OK'" >/dev/null 2>&1; then
    echo "❌ Impossibile connettersi a $SSH_TARGET"
    echo "   Verifica: rete, SSH, credenziali"
    exit 1
fi

echo "   ✅ Connessione SSH OK"

# Verifica sistema target
ssh "$SSH_TARGET" << 'EOF'
echo "📋 Informazioni sistema target:"
echo "   OS: $(lsb_release -d 2>/dev/null | cut -f2 || echo 'Linux')"
echo "   Kernel: $(uname -r)"
echo "   Spazio: $(df -h / | tail -1 | awk '{print $4}') disponibili"
echo "   RAM: $(free -h | grep Mem | awk '{print $7}') libera"
EOF

# === STEP 2: PREPARAZIONE AMBIENTE TARGET ===
echo ""
echo "🔧 STEP 2: Preparazione ambiente su VM target..."

ssh "$SSH_TARGET" << 'EOF'
# Aggiorna sistema
sudo apt update

# Installa strumenti essenziali
sudo apt install -y git curl wget rsync build-essential

# Installa stack LAMP base
sudo apt install -y apache2 mysql-server php8.1 php8.1-mysql php8.1-xml php8.1-mbstring php8.1-zip php8.1-gd php8.1-curl php8.1-cli

# Installa Composer
if ! command -v composer &> /dev/null; then
    curl -sS https://getcomposer.org/installer | php
    sudo mv composer.phar /usr/local/bin/composer
    sudo chmod +x /usr/local/bin/composer
fi

# Installa Node.js e npm
if ! command -v node &> /dev/null; then
    curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
    sudo apt install -y nodejs
fi

# Crea directory di lavoro
mkdir -p /home/michele/netgescon
mkdir -p /var/www/netgescon
mkdir -p /var/git

echo "✅ Ambiente target preparato"
EOF

echo "   ✅ Ambiente VM preparato"

# === STEP 3: TRASFERIMENTO COMPLETO ===
echo ""
echo "📦 STEP 3: Trasferimento completo progetto..."

# Prima sincronizzazione completa
echo "   🔄 Sincronizzazione rsync completa..."
rsync -avz --progress \
    --exclude='.git/objects' \
    --exclude='*.tmp' \
    --exclude='__pycache__' \
    --exclude='venv' \
    --exclude='node_modules' \
    --exclude='.env' \
    --exclude='storage/logs/*.log' \
    "$SOURCE_PATH/" \
    "$SSH_TARGET:$TARGET_PATH/"

echo "   ✅ Trasferimento file completato"

# === STEP 4: SETUP GIT SU TARGET ===
echo ""
echo "🔧 STEP 4: Setup Git su VM target..."

ssh "$SSH_TARGET" << 'EOF'
cd /home/michele/netgescon

# Configura Git
git config --global user.name "NetGescon Master VM"
git config --global user.email "master@netgescon.local"
git config --global init.defaultBranch master

# Re-inizializza repository se necessario
if [ ! -d ".git" ]; then
    git init
    git add .
    git commit -m "🚀 NETGESCON - Migrazione completa su VM Master

📋 Migrazione da Windows WSL a VM Linux
🔄 Repository ricreato su server master
📅 $(date '+%Y-%m-%d %H:%M:%S')
🎯 Sistema pronto per sviluppo Linux nativo"
else
    # Se esiste già, aggiungi eventuali nuovi file
    git add .
    if [ -n "$(git status --porcelain)" ]; then
        git commit -m "🔄 Sync da Windows WSL $(date '+%Y-%m-%d %H:%M:%S')"
    fi
fi

echo "✅ Git configurato su VM target"
EOF

# === STEP 5: SETUP SERVER GIT GITEA ===
echo ""
echo "🏢 STEP 5: Setup server Git (Gitea) su VM..."

# Trasferisce e esegue script setup Gitea
scp "$SOURCE_PATH/docs/03-scripts-automazione/setup-git-server-master.sh" "$SSH_TARGET:/tmp/"

ssh "$SSH_TARGET" << 'EOF'
chmod +x /tmp/setup-git-server-master.sh

# Esegue setup Gitea (richiede sudo)
echo "🔧 Installazione Gitea server..."
sudo /tmp/setup-git-server-master.sh

echo "✅ Server Git configurato"
EOF

# === STEP 6: CONFIGURAZIONE LARAVEL ===
echo ""
echo "🔧 STEP 6: Configurazione Laravel su VM..."

ssh "$SSH_TARGET" << 'EOF'
cd /home/michele/netgescon/netgescon-laravel

# Installa dipendenze Composer
if [ -f "composer.json" ]; then
    composer install --no-dev --optimize-autoloader
fi

# Copia e configura .env
if [ ! -f ".env" ] && [ -f ".env.example" ]; then
    cp .env.example .env
    php artisan key:generate
fi

# Configura permessi
sudo chown -R www-data:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache

echo "✅ Laravel configurato"
EOF

# === STEP 7: CONFIGURAZIONE APACHE ===
echo ""
echo "🌐 STEP 7: Configurazione Apache per NetGescon..."

ssh "$SSH_TARGET" << 'EOF'
# Configurazione VirtualHost Apache
sudo tee /etc/apache2/sites-available/netgescon.conf > /dev/null << 'APACHE_CONF'
<VirtualHost *:80>
    ServerName netgescon.local
    DocumentRoot /home/michele/netgescon/netgescon-laravel/public
    
    <Directory /home/michele/netgescon/netgescon-laravel/public>
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/netgescon_error.log
    CustomLog ${APACHE_LOG_DIR}/netgescon_access.log combined
</VirtualHost>
APACHE_CONF

# Abilita sito e moduli
sudo a2enmod rewrite
sudo a2ensite netgescon
sudo systemctl reload apache2

echo "✅ Apache configurato"
EOF

# === STEP 8: TEST FINALE ===
echo ""
echo "🧪 STEP 8: Test configurazione finale..."

ssh "$SSH_TARGET" << 'EOF'
cd /home/michele/netgescon

echo "📊 === RIEPILOGO CONFIGURAZIONE VM ==="
echo "✅ Sistema: $(lsb_release -d 2>/dev/null | cut -f2 || echo 'Linux')"
echo "✅ Git: $(git --version)"
echo "✅ PHP: $(php --version | head -1)"
echo "✅ Composer: $(composer --version | head -1)"
echo "✅ Node.js: $(node --version)"
echo "✅ Apache: $(apache2 -v | head -1)"
echo ""

echo "📁 Struttura progetto:"
ls -la /home/michele/netgescon/
echo ""

echo "🔄 Status Git:"
git status --short
echo ""

echo "🌐 Servizi attivi:"
sudo systemctl is-active apache2 mysql gitea-docker-compose --no-pager
EOF

# === RIEPILOGO FINALE ===
echo ""
echo "📊 === RIEPILOGO MIGRAZIONE COMPLETA ==="
echo "✅ VM target preparata e configurata"
echo "✅ Progetto NetGescon trasferito completamente"
echo "✅ Git repository configurato su VM"
echo "✅ Server Git (Gitea) installato"
echo "✅ Stack LAMP configurato"
echo "✅ Laravel pronto per sviluppo"
echo ""

echo "🌐 Accesso VM:"
echo "   SSH: ssh $SSH_TARGET"
echo "   Web: http://$TARGET_SERVER (NetGescon)"
echo "   Git: http://$TARGET_SERVER:3000 (Gitea)"
echo ""

echo "📋 Prossimi passi:"
echo "1. 🌐 Configurare DNS/hosts per netgescon.local"
echo "2. 🔧 Completare setup Gitea via web"
echo "3. 🚀 Creare primo repository in Gitea"
echo "4. 🔄 Push del codice dal VM al Gitea locale"
echo ""

echo "🎯 Migrazione completata con successo!"
echo "📅 $(date '+%Y-%m-%d %H:%M:%S')"
