#!/bin/bash

# Optionaler Parameter für STAGE (Standard: production)
STAGE=${1:-production}

echo "Updating YourPart Backend..."
echo "Using STAGE: $STAGE"
echo "NOTE: .env files will NOT be overwritten"

# Zum Backend-Verzeichnis wechseln
cd backend

# Alle generierten Verzeichnisse löschen
echo "Lösche alle generierten Verzeichnisse..."
rm -rf node_modules/.cache/
rm -rf logs/
rm -rf tmp/

# Dependencies installieren
echo "Installing dependencies..."
npm ci --production

# Sichere .env-Dateien aus /opt/yourpart/backend temporär
TEMP_ENV_DIR="/tmp/yourpart-env-backup-$$"
echo "Sichere .env-Dateien aus /opt/yourpart/backend..."
sudo mkdir -p "$TEMP_ENV_DIR"
if [ -d /opt/yourpart/backend ]; then
    sudo find /opt/yourpart/backend -maxdepth 1 -name '.env*' -type f -exec cp {} "$TEMP_ENV_DIR/" \; 2>/dev/null || true
    if [ "$(ls -A $TEMP_ENV_DIR 2>/dev/null)" ]; then
        echo "✓ .env-Dateien gesichert: $(ls $TEMP_ENV_DIR)"
    else
        echo "⚠ Keine .env-Dateien in /opt/yourpart/backend gefunden"
    fi
fi

# Altes Backend löschen
echo "Lösche altes Backend..."
sudo rm -rf /opt/yourpart/backend

# Erstelle Backend-Verzeichnis
echo "Erstelle Backend-Verzeichnis..."
sudo mkdir -p /opt/yourpart/backend

# Kopiere neues Backend (ohne .env-Dateien aus dem Quellverzeichnis)
echo "Kopiere neues Backend..."
if command -v rsync &> /dev/null; then
    sudo rsync -av --exclude='.env*' --exclude='node_modules' . /opt/yourpart/backend/ 2>/dev/null
    if [ -d node_modules ]; then
        sudo rsync -av --exclude='.env*' node_modules/ /opt/yourpart/backend/node_modules/ 2>/dev/null || \
        sudo cp -r node_modules /opt/yourpart/backend/ 2>/dev/null
    fi
else
    # Fallback: Kopiere alles außer .env
    sudo cp -r * /opt/yourpart/backend/ 2>/dev/null
fi

# Stelle .env-Dateien wieder her
echo "Stelle .env-Dateien wieder her..."
if [ -d "$TEMP_ENV_DIR" ] && [ "$(ls -A $TEMP_ENV_DIR 2>/dev/null)" ]; then
    sudo cp "$TEMP_ENV_DIR"/.env* /opt/yourpart/backend/ 2>/dev/null || true
    echo "✓ .env-Dateien wiederhergestellt"
else
    echo "⚠ Keine .env-Dateien zum Wiederherstellen vorhanden"
fi
sudo rm -rf "$TEMP_ENV_DIR"

# Prüfe ob .env vorhanden ist
if [ -f /opt/yourpart/backend/.env ]; then
    echo "✓ .env-Datei ist vorhanden"
else
    echo "⚠ WARNUNG: Keine .env-Datei in /opt/yourpart/backend gefunden!"
    echo "  Bitte manuell erstellen: sudo nano /opt/yourpart/backend/.env"
fi

# Berechtigungen setzen
echo "Setting permissions..."
sudo chown -R yourpart:yourpart /opt/yourpart/backend
sudo chmod -R 755 /opt/yourpart/backend
# Stelle sicher, dass .env-Dateien die richtigen Berechtigungen haben
if [ -f /opt/yourpart/backend/.env ]; then
    sudo chmod 600 /opt/yourpart/backend/.env
fi

# Systemd-Service aktualisieren und neu laden
echo "Updating systemd service..."
sudo cp yourpart.service /etc/systemd/system/
sudo systemctl daemon-reload

# Datenbank-Synchronisation durchführen
echo "Running database synchronization..."
cd /opt/yourpart/backend

# STAGE für Schema-Updates verwenden
echo "Running database sync with STAGE=$STAGE..."
export STAGE=$STAGE && npm run sync-db

# Service neu starten
echo "Restarting yourpart service..."
sudo systemctl restart yourpart

# Kurz warten und Status prüfen
sleep 2
echo "Checking service status..."
sudo systemctl status yourpart --no-pager

echo "Backend update completed!"

