# YourPart Daemon Deployment Script für Ubuntu 22
# Verwendung: ./deploy.sh [server_ip] [ssh_user]

set -euo pipefail

# Farben für Output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Konfiguration
SERVER_IP="${1:-your-part.de}"
SSH_USER="${2:-root}"
DAEMON_USER="yourpart"
PROJECT_NAME="yourpart-daemon"
REMOTE_DIR="/opt/yourpart"
SERVICE_NAME="yourpart-daemon"

# Funktionen
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# Prüfe ob wir im richtigen Verzeichnis sind
if [ ! -f "CMakeLists.txt" ] || [ ! -f "daemon.conf" ]; then
    log_error "Bitte führen Sie dieses Script aus dem Projektverzeichnis aus!"
    exit 1
fi

log_info "Starte Deployment für YourPart Daemon..."
log_info "Server: $SERVER_IP"
log_info "SSH User: $SSH_USER"

# 1. Lokales Build
log_info "Baue Projekt lokal..."
if [ ! -d "build" ]; then
    mkdir build
fi

cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=23
make -j$(nproc)
cd ..

log_success "Lokaler Build abgeschlossen"

# 2. Erstelle Deployment-Paket
log_info "Erstelle Deployment-Paket..."
DEPLOY_DIR="deploy_package"
rm -rf "$DEPLOY_DIR"
mkdir -p "$DEPLOY_DIR"

# Kopiere Binärdatei
cp build/yourpart-daemon "$DEPLOY_DIR/"

# Kopiere Konfigurationsdatei
cp daemon.conf "$DEPLOY_DIR/"

# Kopiere Service-Datei
cp yourpart-daemon.service "$DEPLOY_DIR/"

# Erstelle Installations-Script
cat > "$DEPLOY_DIR/install.sh" << 'EOF'
#!/bin/bash
set -euo pipefail

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

log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }

DAEMON_USER="yourpart"
REMOTE_DIR="/opt/yourpart"
SERVICE_NAME="yourpart-daemon"

log_info "Installiere YourPart Daemon..."

# Erstelle Benutzer falls nicht vorhanden
if ! id "$DAEMON_USER" &>/dev/null; then
    log_info "Erstelle Benutzer $DAEMON_USER..."
    useradd --system --shell /bin/false --home-dir "$REMOTE_DIR" --create-home "$DAEMON_USER"
    log_success "Benutzer $DAEMON_USER erstellt"
else
    log_info "Benutzer $DAEMON_USER existiert bereits"
fi

# Erstelle Verzeichnisse
log_info "Erstelle Verzeichnisse..."
mkdir -p "$REMOTE_DIR"/{logs,config}
mkdir -p /etc/yourpart
mkdir -p /var/log/yourpart

# Kopiere Dateien
log_info "Kopiere Dateien..."
cp yourpart-daemon /usr/local/bin/
cp daemon.conf /etc/yourpart/
cp yourpart-daemon.service /etc/systemd/system/

# Setze Berechtigungen
chmod +x /usr/local/bin/yourpart-daemon
chown -R "$DAEMON_USER:$DAEMON_USER" "$REMOTE_DIR"
chown -R "$DAEMON_USER:$DAEMON_USER" /var/log/yourpart
chmod 600 /etc/yourpart/daemon.conf

# Lade systemd neu
log_info "Lade systemd Konfiguration neu..."
systemctl daemon-reload

# Aktiviere Service
log_info "Aktiviere Service..."
systemctl enable "$SERVICE_NAME"

log_success "Installation abgeschlossen!"
log_info "Verwenden Sie 'systemctl start $SERVICE_NAME' um den Service zu starten"
log_info "Verwenden Sie 'systemctl status $SERVICE_NAME' um den Status zu prüfen"
log_info "Verwenden Sie 'journalctl -u $SERVICE_NAME -f' um die Logs zu verfolgen"
EOF

chmod +x "$DEPLOY_DIR/install.sh"

# Erstelle Tarball
tar -czf "${PROJECT_NAME}_deploy.tar.gz" -C "$DEPLOY_DIR" .

log_success "Deployment-Paket erstellt: ${PROJECT_NAME}_deploy.tar.gz"

# 3. Upload zum Server
log_info "Lade Dateien zum Server hoch..."
scp "${PROJECT_NAME}_deploy.tar.gz" "$SSH_USER@$SERVER_IP:/tmp/"

# 4. Installation auf dem Server
log_info "Installiere auf dem Server..."
ssh "$SSH_USER@$SERVER_IP" << EOF
set -euo pipefail

# Entpacke Deployment-Paket
cd /tmp
tar -xzf "${PROJECT_NAME}_deploy.tar.gz"

# Führe Installation aus
./install.sh

# Starte Service
systemctl start $SERVICE_NAME

# Prüfe Status
systemctl status $SERVICE_NAME --no-pager

# Aufräumen
rm -f "${PROJECT_NAME}_deploy.tar.gz"
rm -rf /tmp/yourpart-daemon /tmp/daemon.conf /tmp/yourpart-daemon.service /tmp/install.sh

echo "Deployment erfolgreich abgeschlossen!"
EOF

# 5. Aufräumen
log_info "Räume lokale Dateien auf..."
rm -rf "$DEPLOY_DIR"
rm -f "${PROJECT_NAME}_deploy.tar.gz"

log_success "Deployment erfolgreich abgeschlossen!"
log_info "Der YourPart Daemon läuft jetzt auf $SERVER_IP"
log_info "Verwenden Sie 'ssh $SSH_USER@$SERVER_IP systemctl status $SERVICE_NAME' um den Status zu prüfen"
