#!/bin/bash
# setup-laravel.sh - Da eseguire dopo aver trasferito il progetto

set -e

# Colori per output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_step() { echo -e "${BLUE}[STEP]${NC} $1"; }

echo "🔧 Setup Laravel NetGescon"
echo "==========================="

# Verifica se siamo nella directory corretta
if [ ! -d "/var/www/netgescon/netgescon-laravel" ]; then
    log_error "Directory progetto non trovata: /var/www/netgescon/netgescon-laravel"
    echo "Assicurati di aver trasferito il progetto Laravel nella directory corretta."
    exit 1
fi

cd /var/www/netgescon/netgescon-laravel

# Verifica file artisan
if [ ! -f "artisan" ]; then
    log_error "File artisan non trovato. Assicurati di essere nella directory corretta del progetto Laravel."
    exit 1
fi

log_step "1/10 Configurazione permessi..."
sudo chown -R $USER:www-data .
sudo chmod -R 755 .
sudo chmod -R 775 storage bootstrap/cache
log_info "Permessi configurati correttamente"

log_step "2/10 Installazione dipendenze PHP..."
composer install --optimize-autoloader --no-dev
log_info "Dipendenze PHP installate"

log_step "3/10 Installazione dipendenze Node.js..."
if [ -f "package.json" ]; then
    npm install
    log_info "Dipendenze Node.js installate"
else
    log_warn "File package.json non trovato, saltato npm install"
fi

log_step "4/10 Build asset produzione..."
if [ -f "package.json" ]; then
    npm run build
    log_info "Asset compilati per produzione"
else
    log_warn "Build asset saltato (package.json non trovato)"
fi

log_step "5/10 Configurazione .env..."
if [ ! -f ".env" ]; then
    cp .env.example .env
    log_info "File .env creato da .env.example"
    
    # Configurazione automatica .env
    sed -i 's/DB_DATABASE=laravel/DB_DATABASE=netgescon/' .env
    sed -i 's/DB_USERNAME=root/DB_USERNAME=netgescon_user/' .env
    sed -i 's/DB_PASSWORD=/DB_PASSWORD=NetGescon2024!/' .env
    sed -i 's/APP_ENV=local/APP_ENV=production/' .env
    sed -i 's/APP_DEBUG=true/APP_DEBUG=false/' .env
    
    log_info "File .env configurato automaticamente"
else
    log_info "File .env già esistente"
fi

log_step "6/10 Generazione chiave applicazione..."
php artisan key:generate --force
log_info "Chiave applicazione generata"

log_step "7/10 Test connessione database..."
if php artisan tinker --execute="echo \DB::connection()->getPdo() ? 'OK' : 'FAILED';" 2>/dev/null | grep -q "OK"; then
    log_info "Connessione database OK"
else
    log_error "Connessione database FAILED"
    echo "Verifica che:"
    echo "1. MySQL sia in esecuzione: sudo systemctl status mysql"
    echo "2. Database 'netgescon' sia stato creato"
    echo "3. Utente 'netgescon_user' esista con privilegi corretti"
    echo "4. Password nel file .env sia corretta"
    exit 1
fi

log_step "8/10 Esecuzione migrazioni database..."
php artisan migrate --force
log_info "Migrazioni database completate"

log_step "9/10 Esecuzione seeder..."
if php artisan db:seed --force 2>/dev/null; then
    log_info "Seeder eseguiti con successo"
else
    log_warn "Alcuni seeder potrebbero aver avuto problemi (normale se database già popolato)"
fi

log_step "10/10 Ottimizzazione cache..."
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan storage:link
log_info "Cache ottimizzata e storage link creato"

# Verifica finale
log_info "Verifica finale installazione..."

# Test sintassi Laravel
if php artisan --version >/dev/null 2>&1; then
    LARAVEL_VERSION=$(php artisan --version)
    log_info "Laravel funzionante: $LARAVEL_VERSION"
else
    log_error "Problemi con Laravel"
fi

# Test database
USER_COUNT=$(php artisan tinker --execute="echo \App\Models\User::count();" 2>/dev/null | tail -1)
log_info "Utenti in database: $USER_COUNT"

echo ""
echo "═══════════════════════════════════════════════════════"
echo "✅ SETUP LARAVEL COMPLETATO!"
echo "═══════════════════════════════════════════════════════"
echo ""
echo "🌐 TEST APPLICAZIONE:"
echo "   php artisan serve --host=0.0.0.0 --port=8000"
echo "   Vai su: http://$(hostname -I | awk '{print $1}'):8000"
echo ""
echo "📁 DIRECTORY PROGETTO:"
echo "   $(pwd)"
echo ""
echo "🔒 UTENTI DATABASE: $USER_COUNT"
echo ""
echo "═══════════════════════════════════════════════════════"
echo ""
echo "🔧 NEXT STEPS:"
echo ""
echo "1️⃣  TESTA APPLICAZIONE:"
echo "    php artisan serve --host=0.0.0.0 --port=8000"
echo ""
echo "2️⃣  CONFIGURA NGINX:"
echo "    - Crea virtual host (vedi guida completa)"
echo "    - Configura dominio/IP"
echo ""
echo "3️⃣  CONFIGURA BACKUP:"
echo "    - Script backup automatico"
echo "    - Crontab per backup periodici"
echo ""
echo "4️⃣  API LEGACY (se necessario):"
echo "    - Configura bridge per connessione legacy"
echo "    - Test import/export dati"
echo ""

# Salva info setup
echo "=== Laravel Setup Info ===" >> ~/netgescon-setup-info.txt
echo "Data setup Laravel: $(date)" >> ~/netgescon-setup-info.txt
echo "Directory progetto: $(pwd)" >> ~/netgescon-setup-info.txt
echo "Laravel version: $LARAVEL_VERSION" >> ~/netgescon-setup-info.txt
echo "Utenti database: $USER_COUNT" >> ~/netgescon-setup-info.txt
echo "" >> ~/netgescon-setup-info.txt

log_info "Info setup salvate in: ~/netgescon-setup-info.txt"
