#!/bin/bash
# Exit immediato su errori
set -e

# Rileva automaticamente il percorso del progetto
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")"
PROJECT_NAME="$(basename "$PROJECT_DIR")"
PACKAGE_NAME="${PROJECT_NAME}-$(date +%Y%m%d-%H%M%S).tar.gz"
DEST_DIR="$(dirname "$PROJECT_DIR")"

if [ $# -lt 1 ]; then
    echo "Uso: $0 <user@server>"
    echo "Esempio: $0 user@server"
    exit 1
fi

REMOTE_TARGET="$1"

# Verifica comandi necessari
for cmd in composer php rsync tar; do
    if ! command -v "$cmd" >/dev/null 2>&1; then
        echo "ERRORE: $cmd non installato"
        exit 1
    fi
done

echo "=== Deploying: $PROJECT_NAME ==="
echo "Package: $PACKAGE_NAME"
echo "Target: $REMOTE_TARGET"
echo

# Optimizations Laravel
echo "1. Ottimizzazioni Laravel..."
composer install --no-dev --optimize-autoloader --no-interaction
php artisan cache:clear
php artisan config:clear

# Crea pacchetto
echo "2. Creazione pacchetto..."
cd ..
if [ -f "$DEST_DIR/$PACKAGE_NAME" ]; then
    rm "$DEST_DIR/$PACKAGE_NAME"
fi

tar -czf "$DEST_DIR/$PACKAGE_NAME" \
  --exclude='.git' \
  --exclude='.env' \
  --exclude='node_modules' \
  --exclude='tests' \
  --exclude='.idea' \
  --exclude='*.log' \
  "$PROJECT_NAME"

# Upload
echo "3. Upload..."
if rsync -avz -e ssh --progress "$DEST_DIR/$PACKAGE_NAME" "${REMOTE_TARGET}:"; then
    rm "$DEST_DIR/$PACKAGE_NAME"
    echo "✅ Upload completato!"
    echo "📦 Pacchetto: $PACKAGE_NAME"
    echo "🎯 Target: $REMOTE_TARGET"
else
    echo "❌ Upload fallito!"
    exit 1
fi

# Installation into the server
echo "4. Installazione sul server..."

ssh "$REMOTE_TARGET" "
    # Crea backup
    sudo tar -czf '/var/www/backups/${PROJECT_NAME}-$(date +%Y%m%d-%H%M%S).tar.gz' -C /var/www/ '${PROJECT_NAME}' 2>/dev/null || echo '⚠️  Backup skipped or failed'

    # Backup del file .env esistente
    sudo cp /var/www/${PROJECT_NAME}/.env /tmp/${PROJECT_NAME}.env.backup

    # Rimuovi il pacchetto backuppato
    sudo rm -r /var/www/${PROJECT_NAME}

    # Estrai nuovo pacchetto
    sudo tar -xzf '${PACKAGE_NAME}' -C /var/www/

    # Ripristina il file .env dal backup
    sudo cp /tmp/${PROJECT_NAME}.env.backup /var/www/${PROJECT_NAME}/.env

    # Fix permessi
    sudo chown -R svc_apache2: '/var/www/${PROJECT_NAME}/'
    sudo chown root: '/var/www/${PROJECT_NAME}'
    sudo find /var/www/${PROJECT_NAME}/ -type f -exec chmod 664 {} \;   #Lettura e scrittura a file per owner e group
    sudo find /var/www/${PROJECT_NAME}/ -type d -exec chmod 775 {} \;   #Accesso, lettura e scrittura a cartelle per owner e group
    sudo chmod 755 /var/www/${PROJECT_NAME}/

    # Restart di supervisor
    sudo systemctl restart supervisor

    echo '✅ Installazione sul server completata'
"
