#!/bin/bash

# SingleChat Deployment nach /opt/ypchat
# Dieses Skript kopiert die Anwendung nach /opt/ypchat und installiert sie dort

set -e

SOURCE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TARGET_DIR="/opt/ypchat"
USER="www-data"
GROUP="www-data"

echo "=========================================="
echo "SingleChat Deployment nach /opt/ypchat"
echo "=========================================="

# Prüfe ob als root ausgeführt
if [ "$EUID" -ne 0 ]; then 
    echo "FEHLER: Dieses Skript muss als root ausgeführt werden!"
    echo "Bitte führe aus: sudo ./deploy-to-opt.sh"
    exit 1
fi

# Prüfe ob Source-Verzeichnis existiert
if [ ! -d "$SOURCE_DIR" ]; then
    echo "FEHLER: Source-Verzeichnis $SOURCE_DIR existiert nicht!"
    exit 1
fi

echo "Source-Verzeichnis: $SOURCE_DIR"
echo "Target-Verzeichnis: $TARGET_DIR"
echo ""

# Erstelle Target-Verzeichnis falls nicht vorhanden
if [ ! -d "$TARGET_DIR" ]; then
    echo "Erstelle Target-Verzeichnis..."
    mkdir -p "$TARGET_DIR"
    echo "✓ Verzeichnis erstellt"
fi

# Kopiere Dateien (ausschließlich node_modules, .git, dist, logs, npm cache)
echo "Kopiere Dateien nach $TARGET_DIR..."
rsync -av --progress \
    --exclude 'node_modules' \
    --exclude '.git' \
    --exclude 'client/node_modules' \
    --exclude 'client/dist' \
    --exclude 'docroot/dist' \
    --exclude 'logs' \
    --exclude '.env' \
    --exclude '.npm-cache' \
    --exclude '.npm' \
    "$SOURCE_DIR/" "$TARGET_DIR/"

echo "✓ Dateien kopiert"

# Setze Besitzer
echo "Setze Besitzer auf $USER:$GROUP..."
chown -R $USER:$GROUP "$TARGET_DIR"
echo "✓ Besitzer gesetzt"

# Wechsle ins Target-Verzeichnis und führe Installation durch
echo ""
echo "Führe Installation in $TARGET_DIR durch..."
cd "$TARGET_DIR"

# Repariere npm Cache für www-data falls nötig
echo ""
echo "Prüfe npm Cache-Berechtigungen..."
if [ -d "/var/www/.npm" ]; then
    chown -R $USER:$GROUP "/var/www/.npm" 2>/dev/null || true
fi

# Setze npm Cache auf ein Verzeichnis im App-Verzeichnis
NPM_CACHE_DIR="$TARGET_DIR/.npm-cache"
mkdir -p "$NPM_CACHE_DIR"
chown -R $USER:$GROUP "$NPM_CACHE_DIR"

# Installiere Dependencies
echo ""
echo "Installiere Dependencies..."
sudo -u $USER bash -c "cd '$TARGET_DIR' && HOME='$TARGET_DIR' npm config set cache '$NPM_CACHE_DIR' && HOME='$TARGET_DIR' npm run install:all"

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

echo "✓ Dependencies installiert"

# Baue Client
echo ""
echo "Baue Client für Production..."
sudo -u $USER bash -c "cd '$TARGET_DIR' && HOME='$TARGET_DIR' npm config set cache '$NPM_CACHE_DIR' && cd client && HOME='$TARGET_DIR' npm config set cache '$NPM_CACHE_DIR' && cd .. && HOME='$TARGET_DIR' 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 "$TARGET_DIR/docroot/dist" ]; then
    rm -rf "$TARGET_DIR/docroot/dist"
fi
cp -r "$TARGET_DIR/client/dist" "$TARGET_DIR/docroot/"
chown -R $USER:$GROUP "$TARGET_DIR/docroot/dist"

echo "✓ Dateien kopiert"

# Erstelle .env Datei falls nicht vorhanden
if [ ! -f "$TARGET_DIR/.env" ]; then
    echo ""
    echo "Erstelle .env Datei..."
    SESSION_SECRET=$(openssl rand -hex 32)
    cat > "$TARGET_DIR/.env" << EOF
NODE_ENV=production
PORT=4000
SESSION_SECRET=$SESSION_SECRET
EOF
    chown $USER:$GROUP "$TARGET_DIR/.env"
    echo "✓ .env Datei erstellt"
    echo "SESSION_SECRET wurde generiert: $SESSION_SECRET"
else
    echo "✓ .env Datei existiert bereits"
fi

echo ""
echo "=========================================="
echo "Deployment abgeschlossen!"
echo "=========================================="
echo ""
echo "Nächste Schritte:"
echo "1. Installiere den Service:"
echo "   cd $TARGET_DIR"
echo "   sudo ./install-service-ypchat.sh"
echo ""
echo "2. Stoppe den alten Service:"
echo "   sudo systemctl stop ypchat"
echo ""
echo "3. Starte den neuen Service:"
echo "   sudo systemctl start ypchat"
echo "   sudo systemctl status ypchat"
echo ""

