#!/bin/bash

# Script di setup completo ambiente di sviluppo Netgescon
# Uso: ./setup-complete-environment.sh

echo "🏗️ SETUP COMPLETO AMBIENTE NETGESCON"
echo "===================================="

# Colori per output
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
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"
}

echo ""
log_info "1️⃣ Verifica prerequisiti..."

# Verifica MySQL
if ! command -v mysql &> /dev/null; then
    log_error "MySQL non trovato. Installazione richiesta."
    exit 1
else
    log_info "MySQL OK"
fi

# Verifica PHP
if ! command -v php &> /dev/null; then
    log_error "PHP non trovato. Installazione richiesta."
    exit 1
else
    log_info "PHP versione: $(php -v | head -n 1)"
fi

# Verifica Composer
if ! command -v composer &> /dev/null; then
    log_error "Composer non trovato. Installazione richiesta."
    exit 1
else
    log_info "Composer OK"
fi

echo ""
log_info "2️⃣ Controllo permessi directory..."

PROJECT_DIR="/var/www/netgescon"
if [ -d "$PROJECT_DIR" ]; then
    log_info "Directory progetto trovata: $PROJECT_DIR"
    
    # Imposta permessi corretti
    sudo chown -R $USER:www-data $PROJECT_DIR
    sudo chmod -R 775 $PROJECT_DIR/storage
    sudo chmod -R 775 $PROJECT_DIR/bootstrap/cache
    
    log_info "Permessi aggiornati"
else
    log_error "Directory progetto non trovata: $PROJECT_DIR"
    exit 1
fi

echo ""
log_info "3️⃣ Installazione/aggiornamento dipendenze..."
cd $PROJECT_DIR

# Composer install
if [ -f "composer.json" ]; then
    composer install --no-dev --optimize-autoloader
    log_info "Dipendenze Composer installate"
else
    log_warn "composer.json non trovato"
fi

# NPM install (se presente)
if [ -f "package.json" ]; then
    if command -v npm &> /dev/null; then
        npm install
        npm run build
        log_info "Dipendenze NPM installate e build completato"
    else
        log_warn "NPM non trovato, skip installazione frontend"
    fi
fi

echo ""
log_info "4️⃣ Configurazione ambiente..."

# Copia .env se non esiste
if [ ! -f ".env" ] && [ -f ".env.example" ]; then
    cp .env.example .env
    log_info "File .env creato da .env.example"
fi

# Genera chiave applicazione se necessario
if grep -q "APP_KEY=$" .env 2>/dev/null; then
    php artisan key:generate
    log_info "Chiave applicazione generata"
fi

echo ""
log_info "5️⃣ Configurazione database..."

# Test connessione database
if php artisan migrate:status &> /dev/null; then
    log_info "Connessione database OK"
    
    # Esegui migration
    php artisan migrate --force
    log_info "Migration eseguite"
    
    # Seed (opzionale)
    if [ -f "database/seeders/DatabaseSeeder.php" ]; then
        php artisan db:seed --force
        log_info "Seeder eseguiti"
    fi
else
    log_error "Connessione database fallita. Controlla configurazione .env"
fi

echo ""
log_info "6️⃣ Ottimizzazione Laravel..."

# Clear cache
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear

# Optimization per produzione
php artisan config:cache
php artisan route:cache
php artisan view:cache

log_info "Cache ottimizzata"

echo ""
log_info "7️⃣ Configurazione servizi..."

# Configurazione Apache/Nginx se richiesto
if command -v apache2 &> /dev/null; then
    log_info "Apache rilevato - configurazione disponibile"
elif command -v nginx &> /dev/null; then
    log_info "Nginx rilevato - configurazione disponibile"
else
    log_warn "Nessun web server rilevato"
fi

echo ""
log_info "8️⃣ Test finale sistema..."

# Test base dell'applicazione
if php artisan about &> /dev/null; then
    log_info "Applicazione Laravel funzionante"
else
    log_error "Problema con l'applicazione Laravel"
fi

echo ""
log_info "✅ SETUP COMPLETATO!"
echo ""
echo "📋 RIEPILOGO:"
echo "- Progetto: $PROJECT_DIR"
echo "- Database: $(php artisan migrate:status | wc -l) migration"
echo "- Cache: Ottimizzata"
echo "- Permessi: Configurati"
echo ""
echo "🚀 L'ambiente è pronto per lo sviluppo!"
echo ""
echo "Comandi utili:"
echo "- Avvia server: php artisan serve --host=0.0.0.0 --port=8000"
echo "- Coda lavori: php artisan queue:work"
echo "- Logs: tail -f storage/logs/laravel.log"
