#!/bin/bash

# NetGescon Sync Automation Setup
# Script per configurare la sincronizzazione automatica
# Versione: 1.0
# Data: 2025-01-17

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CRON_FILE="/tmp/netgescon-sync-cron"

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

echo -e "${BLUE}NetGescon Sync Automation Setup${NC}"
echo "======================================="
echo

# Verifica se i script esistono
if [[ ! -f "$SCRIPT_DIR/auto-sync.sh" ]]; then
    echo -e "${RED}Errore: Script auto-sync.sh non trovato!${NC}"
    exit 1
fi

if [[ ! -f "$SCRIPT_DIR/sync-monitor.sh" ]]; then
    echo -e "${RED}Errore: Script sync-monitor.sh non trovato!${NC}"
    exit 1
fi

echo -e "${GREEN}Script trovati:${NC}"
echo "✅ auto-sync.sh"
echo "✅ sync-monitor.sh"
echo

# Rendi eseguibili gli script
chmod +x "$SCRIPT_DIR/auto-sync.sh"
chmod +x "$SCRIPT_DIR/sync-monitor.sh"

echo -e "${GREEN}Script resi eseguibili${NC}"
echo

# Configurazione cron jobs
echo -e "${BLUE}Configurazione automatizzazione:${NC}"
echo

# Backup del crontab esistente
crontab -l > "$CRON_FILE" 2>/dev/null || echo "" > "$CRON_FILE"

# Aggiungi i nostri job (se non già presenti)
if ! grep -q "NetGescon Auto-Sync" "$CRON_FILE"; then
    cat >> "$CRON_FILE" << EOF

# NetGescon Auto-Sync Jobs
# Sincronizzazione ogni 15 minuti (solo nei giorni lavorativi, ore 8-18)
*/15 8-18 * * 1-5 $SCRIPT_DIR/auto-sync.sh -m sync -v >> $HOME/netgescon/log/cron-sync.log 2>&1

# Backup completo ogni notte alle 2:00
0 2 * * * $SCRIPT_DIR/auto-sync.sh -m backup -t both -v >> $HOME/netgescon/log/cron-backup.log 2>&1

# Deploy completo ogni lunedì alle 6:00
0 6 * * 1 $SCRIPT_DIR/auto-sync.sh -m deploy -r -v >> $HOME/netgescon/log/cron-deploy.log 2>&1

# Monitoraggio dello stato ogni 5 minuti
*/5 * * * * $SCRIPT_DIR/sync-monitor.sh status >> $HOME/netgescon/log/cron-monitor.log 2>&1

# Pulizia log vecchi ogni domenica alle 3:00
0 3 * * 0 find $HOME/netgescon/log -name "*.log" -mtime +30 -delete 2>/dev/null || true

EOF
fi

# Installa il nuovo crontab
if crontab "$CRON_FILE"; then
    echo -e "${GREEN}✅ Crontab aggiornato con successo${NC}"
else
    echo -e "${RED}❌ Errore nell'aggiornamento del crontab${NC}"
    exit 1
fi

# Pulisci file temporaneo
rm -f "$CRON_FILE"

echo
echo -e "${BLUE}Jobs configurati:${NC}"
echo "• Sincronizzazione: ogni 15 minuti (lun-ven, 8-18)"
echo "• Backup completo: ogni notte alle 2:00"
echo "• Deploy completo: ogni lunedì alle 6:00"
echo "• Monitoraggio: ogni 5 minuti"
echo "• Pulizia log: ogni domenica alle 3:00"
echo

# Crea le directory necessarie
mkdir -p "$HOME/netgescon/log"
mkdir -p "$HOME/netgescon/backup/sync"
mkdir -p "$HOME/netgescon/reports"

echo -e "${GREEN}✅ Directory create${NC}"
echo

# Crea script di utilità
cat > "$SCRIPT_DIR/sync-utils.sh" << 'EOF'
#!/bin/bash

# NetGescon Sync Utilities
# Script di utilità per la gestione della sincronizzazione

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

case "${1:-help}" in
    "start")
        echo "Avvio sincronizzazione manuale..."
        "$SCRIPT_DIR/auto-sync.sh" -m sync -v
        ;;
    "stop")
        echo "Arresto processi di sincronizzazione..."
        pkill -f "auto-sync.sh" || true
        echo "Processi arrestati"
        ;;
    "status")
        "$SCRIPT_DIR/sync-monitor.sh" dashboard
        ;;
    "logs")
        tail -f "$HOME/netgescon/log/auto-sync.log"
        ;;
    "backup")
        echo "Avvio backup manuale..."
        "$SCRIPT_DIR/auto-sync.sh" -m backup -t both -v
        ;;
    "deploy")
        echo "Avvio deploy manuale..."
        "$SCRIPT_DIR/auto-sync.sh" -m deploy -r -v
        ;;
    "clean")
        echo "Pulizia log vecchi..."
        find "$HOME/netgescon/log" -name "*.log" -mtime +7 -delete
        echo "Pulizia completata"
        ;;
    "report")
        "$SCRIPT_DIR/sync-monitor.sh" html
        ;;
    "cron")
        echo "Crontab attuale:"
        crontab -l | grep -A 10 -B 2 "NetGescon" || echo "Nessun job NetGescon trovato"
        ;;
    "help"|*)
        echo "NetGescon Sync Utilities"
        echo
        echo "Uso: $0 [COMANDO]"
        echo
        echo "Comandi:"
        echo "  start   Avvia sincronizzazione manuale"
        echo "  stop    Arresta processi di sincronizzazione"
        echo "  status  Mostra dashboard stato"
        echo "  logs    Visualizza log in tempo reale"
        echo "  backup  Esegui backup manuale"
        echo "  deploy  Esegui deploy manuale"
        echo "  clean   Pulisci log vecchi"
        echo "  report  Genera report HTML"
        echo "  cron    Mostra crontab NetGescon"
        echo "  help    Mostra questo aiuto"
        ;;
esac
EOF

chmod +x "$SCRIPT_DIR/sync-utils.sh"

echo -e "${GREEN}✅ Script di utilità creato: sync-utils.sh${NC}"
echo

# Crea link simbolici per accesso facile
if [[ -d "$HOME/bin" ]] || mkdir -p "$HOME/bin"; then
    ln -sf "$SCRIPT_DIR/sync-utils.sh" "$HOME/bin/netgescon-sync" 2>/dev/null || true
    echo -e "${GREEN}✅ Link simbolico creato: ~/bin/netgescon-sync${NC}"
fi

echo
echo -e "${BLUE}Setup completato!${NC}"
echo
echo -e "${YELLOW}Comandi utili:${NC}"
echo "• netgescon-sync status    - Mostra stato"
echo "• netgescon-sync start     - Sincronizzazione manuale"
echo "• netgescon-sync logs      - Visualizza log"
echo "• netgescon-sync report    - Genera report HTML"
echo
echo -e "${YELLOW}File di configurazione:${NC}"
echo "• $SCRIPT_DIR/config/sync-config.conf"
echo
echo -e "${YELLOW}Log directory:${NC}"
echo "• $HOME/netgescon/log/"
echo
echo -e "${GREEN}La sincronizzazione automatica è ora attiva!${NC}"
