#!/bin/bash
# RustDesk - Vorkonfigurierte Installation (macOS)
# Laedt automatisch die aktuelle RustDesk-Version von GitHub.
# Terminal oeffnen und ausfuehren mit: curl -sL https://DEIN-SERVER.de/rustdesk_install_mac.sh | bash
#
# Hinweis: "--config" wirkt bei RustDesk nur mit Adminrechten. Die
# Serverkonfiguration wird daher direkt in die RustDesk-Einstellungsdatei
# des Benutzers geschrieben.

set -e

CONFIG="=0nI9c2VtlWaRRTZyNlZ3h3YhNkSQN2UVJTeyIlNYtCZ5tiVZN3d3F0MKNVWudlI6ISeltmIsIiI6ISawFmIsIyZy9mLsV2auVmbpVmLlR3btVmciojI5FGblJnIsIyZy9mLsV2auVmbpVmLlR3btVmciojI0N3boJye"
APP="/Applications/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 Installation (macOS)"
echo "============================================"
echo ""

echo "[1/4] Lade RustDesk herunter..."
VERSION="$(curl -fsSL https://api.github.com/repos/rustdesk/rustdesk/releases/latest | sed -n 's/.*"tag_name": *"\([^"]*\)".*/\1/p' | head -n 1)"
if [ -z "$VERSION" ]; then
    echo "FEHLER: Aktuelle RustDesk-Version konnte nicht ermittelt werden." >&2
    exit 1
fi
if [ "$(sysctl -n hw.optional.arm64 2>/dev/null)" = "1" ]; then ARCH="aarch64"; else ARCH="x86_64"; fi
echo "      Version ${VERSION} (${ARCH})"
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

echo "[2/4] Installiere RustDesk..."
osascript -e 'quit app "RustDesk"' >/dev/null 2>&1 || true
mkdir -p "$MNT"
hdiutil attach "$DMG" -mountpoint "$MNT" -nobrowse -quiet
rm -rf "$APP"
cp -R "$MNT/RustDesk.app" /Applications/
hdiutil detach "$MNT" -quiet

echo "[3/4] Wende Konfiguration an..."
apply_config

echo "[4/4] Starte RustDesk..."
open "$APP"

echo ""
echo "============================================"
echo "  Installation abgeschlossen!"
echo "  RustDesk ${VERSION} ist mit dem Server verbunden."
echo ""
echo "  WICHTIG: Bitte erlauben Sie in den"
echo "  Systemeinstellungen unter Datenschutz:"
echo "  - Bedienungshilfen"
echo "  - Bildschirmaufnahme"
echo "============================================"
