#!/bin/bash

# SingleChat Installation Script
# Dieses Skript installiert die SingleChat-Anwendung für Production

# set -e wird später aktiviert, nachdem Retry-Logik definiert ist

echo "=========================================="
echo "SingleChat Installation"
echo "=========================================="

# Prüfe ob Node.js installiert ist
if ! command -v node &> /dev/null; then
    echo "FEHLER: Node.js ist nicht installiert!"
    echo "Bitte installiere Node.js (Version 18 oder höher)"
    exit 1
fi

NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 18 ]; then
    echo "FEHLER: Node.js Version 18 oder höher erforderlich!"
    echo "Aktuelle Version: $(node -v)"
    exit 1
fi

echo "✓ Node.js Version: $(node -v)"

# Installiere Dependencies
echo ""
echo "Installiere Dependencies..."
echo "Hinweis: Bei Registry-Fehlern wird automatisch erneut versucht..."

# Funktion für Retry mit Backoff
install_with_retry() {
    local max_attempts=3
    local attempt=1
    local delay=5
    
    while [ $attempt -le $max_attempts ]; do
        echo "Versuch $attempt von $max_attempts..."
        npm run install:all
        
        if [ $? -eq 0 ]; then
            return 0
        fi
        
        if [ $attempt -lt $max_attempts ]; then
            echo "Installation fehlgeschlagen. Warte ${delay} Sekunden vor erneutem Versuch..."
            sleep $delay
            delay=$((delay * 2)) # Exponential backoff
        fi
        
        attempt=$((attempt + 1))
    done
    
    return 1
}

# Versuche Installation mit Retry
if ! install_with_retry; then
    echo ""
    echo "FEHLER: Installation der Dependencies fehlgeschlagen nach mehreren Versuchen!"
    echo "Mögliche Lösungen:"
    echo "1. Prüfe deine Internetverbindung"
    echo "2. Versuche es später erneut (npm Registry könnte temporär überlastet sein)"
    echo "3. Verwende einen alternativen Registry: npm config set registry https://registry.npmmirror.com"
    exit 1
fi

echo "✓ Dependencies installiert"

# Aktiviere set -e für den Rest des Skripts
set -e

# Baue Client
echo ""
echo "Baue Client für Production..."
npm run build

if [ $? -ne 0 ]; then
    echo "FEHLER: Build fehlgeschlagen!"
    exit 1
fi

echo "✓ Client gebaut"

# Kopiere dist nach docroot
echo ""
echo "Kopiere gebaute Dateien nach docroot..."
if [ -d "docroot/dist" ]; then
    rm -rf docroot/dist
fi
cp -r client/dist docroot/

echo "✓ Dateien kopiert"

# Erstelle .env Datei falls nicht vorhanden
if [ ! -f ".env" ]; then
    echo ""
    echo "Erstelle .env Datei..."
    cat > .env << EOF
NODE_ENV=production
PORT=4000
SESSION_SECRET=$(openssl rand -hex 32)
EOF
    echo "✓ .env Datei erstellt"
    echo "WICHTIG: Bitte ändere SESSION_SECRET in .env!"
else
    echo "✓ .env Datei existiert bereits"
fi

# Prüfe ob systemd Service existiert
echo ""
echo "=========================================="
echo "Installation abgeschlossen!"
echo "=========================================="
echo ""
echo "Nächste Schritte:"
echo "1. Überprüfe die .env Datei und passe SESSION_SECRET an"
echo "2. Stelle sicher, dass Apache korrekt konfiguriert ist"
echo "3. Starte den Server mit: npm run start:prod"
echo "   oder als systemd Service (siehe install-service.sh)"
echo ""
echo "Apache-Konfiguration sollte enthalten:"
echo "  ProxyPass / http://localhost:4000/"
echo "  ProxyPassReverse / http://localhost:4000/"
echo ""

