#!/bin/bash
set -euo pipefail
umask 077

if [[ $(/usr/bin/uname -s) != Darwin || $EUID == 0 ]]; then
    echo 'Run this on your Mac as your regular user.' >&2
    exit 1
fi

app=/Applications/RustDesk.app
config_dir="$HOME/Library/Preferences/com.carriez.RustDesk"
config="$config_dir/RustDesk2.toml"
if /usr/bin/pgrep -x RustDesk >/dev/null || [[ -e "$config" ]]; then
    echo 'RustDesk is running or already configured. Use its Network settings to change servers.' >&2
    exit 1
fi

if [[ ! -d "$app" ]]; then
    if [[ $(/usr/sbin/sysctl -n hw.optional.arm64 2>/dev/null || true) == 1 ]]; then
        arch=aarch64
        sha=1b94182cba2375ea29a196f2c8183f7feaa00588474ecd76c92c2303ffd70d7b
    else
        arch=x86_64
        sha=457e45a26d3f0919221e6db3dfb8c6a12ca65190307b53a907c3c51b762eb008
    fi
    temp=$(/usr/bin/mktemp -d)
    mounted=0
    cleanup() {
        if [[ $mounted == 1 ]]; then
            /usr/bin/hdiutil detach "$temp/mount" >/dev/null || return
        fi
        /bin/rm -f "$temp/RustDesk.dmg"
        /bin/rmdir "$temp/mount" "$temp" 2>/dev/null || true
    }
    trap cleanup EXIT
    /bin/mkdir "$temp/mount"
    /usr/bin/curl --fail --silent --show-error --location --retry 2 \
        "https://github.com/rustdesk/rustdesk/releases/download/1.5.1/rustdesk-1.5.1-$arch.dmg" \
        --output "$temp/RustDesk.dmg"
    printf '%s  %s\n' "$sha" "$temp/RustDesk.dmg" | /usr/bin/shasum -a 256 -c -
    /usr/bin/hdiutil attach -readonly -nobrowse -mountpoint "$temp/mount" "$temp/RustDesk.dmg" >/dev/null
    mounted=1
    /usr/bin/ditto "$temp/mount/RustDesk.app" "$app"
fi

/bin/mkdir -p "$config_dir"
(
    set -o noclobber
    cat >"$config" <<'CONFIG'
[options]
custom-rendezvous-server = 'desk.savvin.net'
key = 'yH42OBziYeFptrl2cduioaLd5KZBHJgW96sp8oUxQ9k='
CONFIG
)
/usr/bin/open "$app"
