#!/bin/bash
# RustDesk - Portable Start mit vorkonfiguriertem Server (macOS)
# Laedt automatisch die aktuelle RustDesk-Version von GitHub.
# Ausfuehren: curl -sL https://DEIN-SERVER.de/rustdesk_portable_mac.sh | bash
#
# Hinweis: "--config" wirkt bei RustDesk nur mit Adminrechten. Die
# Serverkonfiguration wird daher direkt in die RustDesk-Einstellungsdatei
# des Benutzers geschrieben.

CONFIG="=0nI9c2VtlWaRRTZyNlZ3h3YhNkSQN2UVJTeyIlNYtCZ5tiVZN3d3F0MKNVWudlI6ISeltmIsIiI6ISawFmIsIyZy9mLsV2auVmbpVmLlR3btVmciojI5FGblJnIsIyZy9mLsV2auVmbpVmLlR3btVmciojI0N3boJye"
APP_DIR="$HOME/Desktop/RustDesk"
APP="$APP_DIR/RustDesk.app"
CFG_FILE="$HOME/Library/Preferences/com.carriez.RustDesk/RustDesk2.toml"
TMP_DIR="$(mktemp -d /tmp/rustdesk.XXXXXX)"
DMG="$TMP_DIR/rustdesk.dmg"
MNT="$TMP_DIR/mnt"
trap 'hdiutil detach "$MNT" -quiet 2>/dev/null; rm -rf "$TMP_DIR"' EXIT

# Schreibt Server, Relay, API und Key aus $CONFIG in die RustDesk2.toml
apply_config() {
    local json host relay api key block
    json="$(printf '%s' "$CONFIG" | rev | base64 -D 2>/dev/null || printf '%s' "$CONFIG" | rev | base64 -d)"
    json_value() { printf '%s' "$json" | sed -n "s/.*\"$1\":\"\([^\"]*\)\".*/\1/p"; }
    host="$(json_value host)"; relay="$(json_value relay)"; api="$(json_value api)"; key="$(json_value key)"
    if [ -z "$host" ]; then
        echo "FEHLER: Konfiguration konnte nicht gelesen werden." >&2
        exit 1
    fi

    # RustDesk beenden, sonst ueberschreibt es die Datei beim Beenden
    osascript -e 'quit app "RustDesk"' >/dev/null 2>&1 || true
    pkill -x -u "$(id -u)" RustDesk >/dev/null 2>&1 || true
    sleep 2

    mkdir -p "$(dirname "$CFG_FILE")"
    touch "$CFG_FILE"
    block="custom-rendezvous-server = '$host'\nrelay-server = '$relay'\napi-server = '$api'\nkey = '$key'"
    awk -v block="$block" '
        /^(custom-rendezvous-server|relay-server|api-server|key) = / { next }
        { print }
        /^\[options\]$/ && !done { print block; done = 1 }
        END { if (!done) { print ""; print "[options]"; print block } }
    ' "$CFG_FILE" > "$CFG_FILE.new"
    mv "$CFG_FILE.new" "$CFG_FILE"
}

echo "============================================"
echo "  RustDesk - Portable Start"
echo "============================================"
echo ""

echo "[1/3] Ermittle aktuelle RustDesk-Version..."
VERSION="$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk/releases/latest | sed -n 's/.*"tag_name": *"\([^"]*\)".*/\1/p' | head -n 1)"
INSTALLED_VERSION="$(defaults read "$APP/Contents/Info.plist" CFBundleShortVersionString 2>/dev/null)"
if [ "$(sysctl -n hw.optional.arm64 2>/dev/null)" = "1" ]; then ARCH="aarch64"; else ARCH="x86_64"; fi

if [ -z "$VERSION" ]; then
    if [ -d "$APP" ]; then
        echo "      Versionsabfrage fehlgeschlagen - starte vorhandene Version ${INSTALLED_VERSION}."
    else
        echo "FEHLER: Aktuelle Version konnte nicht ermittelt werden. Bitte Internetverbindung pruefen." >&2
        exit 1
    fi
elif [ -d "$APP" ] && [ "$INSTALLED_VERSION" = "$VERSION" ]; then
    echo "      Version ${VERSION} bereits aktuell, kein Download noetig."
else
    echo "[2/3] Lade RustDesk ${VERSION} (${ARCH}) herunter..."
    if ! curl -fL --progress-bar -o "$DMG" "https://github.com/rustdesk/rustdesk/releases/download/${VERSION}/rustdesk-${VERSION}-${ARCH}.dmg"; then
        echo "FEHLER: Download fehlgeschlagen." >&2
        exit 1
    fi
    osascript -e 'quit app "RustDesk"' >/dev/null 2>&1 || true
    mkdir -p "$MNT" "$APP_DIR"
    if ! hdiutil attach "$DMG" -mountpoint "$MNT" -nobrowse -quiet; then
        echo "FEHLER: DMG konnte nicht geoeffnet werden." >&2
        exit 1
    fi
    rm -rf "$APP"
    cp -R "$MNT/RustDesk.app" "$APP_DIR/"
    hdiutil detach "$MNT" -quiet
fi

echo "[3/3] Starte RustDesk mit Serverkonfiguration..."
apply_config
open "$APP"

echo ""
echo "============================================"
echo "  RustDesk laeuft jetzt portable."
echo "  Keine Installation noetig."
echo ""
echo "  WICHTIG: Bitte erlauben Sie in den"
echo "  Systemeinstellungen unter Datenschutz:"
echo "  - Bedienungshilfen"
echo "  - Bildschirmaufnahme"
echo "============================================"
