#!/bin/bash
# ============================================================
# WinLab Monitor - Script di Installazione Automatico (macOS)
# ============================================================

set -eu

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

# Funzioni di utilità
print_header() {
    echo -e "${BLUE}============================================${NC}"
    echo -e "${BLUE}  WinLab Monitor - Installazione${NC}"
    echo -e "${BLUE}============================================${NC}"
    echo ""
}

print_success() {
    echo -e "${GREEN}[OK]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERRORE]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

print_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

# Verifica macOS
if [[ "$(uname)" != "Darwin" ]]; then
    print_error "Questo script è solo per macOS"
    exit 1
fi

print_header

# Trova l'eseguibile
EXE_PATH=""
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"

if [[ -f "$SCRIPT_DIR/winlab-monitor-mac" ]]; then
    EXE_PATH="$SCRIPT_DIR/winlab-monitor-mac"
    print_success "Trovato: winlab-monitor-mac"
elif [[ -f "$SCRIPT_DIR/../public/downloads/winlab-monitor-mac" ]]; then
    EXE_PATH="$SCRIPT_DIR/../public/downloads/winlab-monitor-mac"
    print_success "Trovato: ../public/downloads/winlab-monitor-mac"
else
    print_error "Impossibile trovare winlab-monitor-mac"
    echo ""
    echo "Assicurati che il file sia nella stessa cartella di questo script"
    echo "o in ../public/downloads/"
    exit 1
fi

echo ""
echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE}  Creazione Directory di Installazione${NC}"
echo -e "${BLUE}============================================${NC}"
echo ""

INSTALL_DIR="$HOME/.winlab-monitor"
LAUNCH_AGENTS_DIR="$HOME/Library/LaunchAgents"
PLIST_FILE="$LAUNCH_AGENTS_DIR/com.winlab.monitor.plist"

if [[ ! -d "$INSTALL_DIR" ]]; then
    mkdir -p "$INSTALL_DIR"
    print_success "Creata directory: $INSTALL_DIR"
else
    print_success "Directory esistente: $INSTALL_DIR"
fi

echo ""
echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE}  Copia File${NC}"
echo -e "${BLUE}============================================${NC}"
echo ""

cp "$EXE_PATH" "$INSTALL_DIR/winlab-monitor"
chmod +x "$INSTALL_DIR/winlab-monitor"
print_success "Copiato e impostati permessi: winlab-monitor"

echo ""
echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE}  Configurazione Avvio Automatico${NC}"
echo -e "${BLUE}============================================${NC}"
echo ""

read -p "Vuoi avviare WinLab Monitor automaticamente all'avvio? (S/N): " AUTO_START
if [[ "$AUTO_START" =~ ^[Ss]$ ]]; then
    # Crea directory LaunchAgents se non esiste
    if [[ ! -d "$LAUNCH_AGENTS_DIR" ]]; then
        mkdir -p "$LAUNCH_AGENTS_DIR"
    fi

    # Crea plist file
    cat > "$PLIST_FILE" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.winlab.monitor</string>
    <key>ProgramArguments</key>
    <array>
        <string>$INSTALL_DIR/winlab-monitor</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>StandardOutPath</key>
    <string>$INSTALL_DIR/winlab-monitor.log</string>
    <key>StandardErrorPath</key>
    <string>$INSTALL_DIR/winlab-monitor-error.log</string>
</dict>
</plist>
EOF

    # Carica il launch agent
    if launchctl load "$PLIST_FILE" 2>/dev/null; then
        print_success "Configurato avvio automatico"
    else
        print_warning "Impossibile caricare launch agent (probabilmente già caricato)"
    fi
else
    print_info "Avvio automatico non configurato"
fi

echo ""
echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE}  Creazione Script di Avvio${NC}"
echo -e "${BLUE}============================================${NC}"
echo ""

cat > "$INSTALL_DIR/start-winlab-monitor.sh" <<'EOF'
#!/bin/bash
cd "$HOME/.winlab-monitor"
./winlab-monitor
EOF
chmod +x "$INSTALL_DIR/start-winlab-monitor.sh"
print_success "Creato script di avvio: $INSTALL_DIR/start-winlab-monitor.sh"

echo ""
echo -e "${BLUE}============================================${NC}"
echo -e "${BLUE}  Installazione Completata!${NC}"
echo -e "${BLUE}============================================${NC}"
echo ""
echo "Directory installazione: $INSTALL_DIR"
echo "Eseguibile: $INSTALL_DIR/winlab-monitor"
echo ""
echo "Istruzioni primo avvio:"
echo "1. Avvia il programma con: $INSTALL_DIR/start-winlab-monitor.sh"
echo "2. Se macOS mostra un avviso:"
echo "   - Vai in 'Impostazioni di Sistema' → 'Privacy e Sicurezza'"
echo "   - Clicca 'Apri comunque'"
echo "3. Il monitor sarà disponibile su: http://localhost:3000"
echo ""
echo "Per avviare manualmente:"
echo "  $INSTALL_DIR/start-winlab-monitor.sh"
echo ""
echo "Per disabilitare avvio automatico:"
echo "  launchctl unload $PLIST_FILE"
echo "  rm $PLIST_FILE"
echo ""
echo "Per disinstallare completamente:"
echo "  1. Ferma il monitor (Ctrl+C se in esecuzione)"
echo "  2. Disabilita avvio automatico (vedi sopra)"
echo "  3. Elimina la directory: rm -rf $INSTALL_DIR"
echo ""

read -p "Vuoi avviare WinLab Monitor ora? (S/N): " LAUNCH
if [[ "$LAUNCH" =~ ^[Ss]$ ]]; then
    echo ""
    print_info "Avvio WinLab Monitor..."
    echo ""
    echo "Il monitor si avvierà in una nuova finestra terminale."
    echo "Chiudi la finestra per fermare il monitor."
    echo ""
    osascript -e "tell application \"Terminal\" to do script \"$INSTALL_DIR/start-winlab-monitor.sh\""
    sleep 2
    echo ""
    print_info "Apri il browser su: http://localhost:3000"
fi

echo ""
print_success "Installazione completata!"
echo ""