#!/usr/bin/env bash
# =====================================================================
#  INSTALLER RUSTDESK OTOMATIS (macOS) - server sendiri
#  Server : rd.dataonlive.com
#  Pakai  : sudo bash install-rustdesk-macos.sh
#  CATATAN: setelah selesai WAJIB mengizinkan Screen Recording &
#           Accessibility secara MANUAL (batasan macOS, tidak bisa
#           diotomatiskan tanpa MDM).
# =====================================================================
set -u

# ---------------- KONFIGURASI ----------------
RD_HOST="rd.dataonlive.com"
RD_KEY="sHpOcK12ZiiwxYj0jmHQHOBkJu6ws3YeL7oxGReZqNw="
RD_CFG="==Qfi0zdOFnWlJ1R492NMVWWzM3d2UnSrJ0TIFFStpGMqlFe3lWaaJTMLN2Twh0ciojI5V2aiwiIiojIpBXYiwiIt92YuUmdpxmbvFGdhRmLkJnI6ISehxWZyJCLi02bj5SZ2lGbu9WY0FGZuQmciojI0N3boJye"
RD_VER="1.4.9"
RD_TOKEN="xADXKCnzwZLRPLEByY3EkNYTWptUHomJ"
RD_REPORT="https://rd.dataonlive.com/api/report"
RD_PASSWORD=""          # kosongkan = password acak
# ---------------------------------------------

[ "$(uname)" = "Darwin" ] || { echo "Skrip ini untuk macOS."; exit 1; }
[ "$(id -u)" -eq 0 ] || exec sudo bash "$0" "$@"

echo
echo "=========================================================="
echo "  INSTALASI RUSTDESK - MENGHUBUNGKAN KE SERVER KANTOR"
echo "  Server : ${RD_HOST}"
echo "=========================================================="

MACH="$(uname -m)"
case "$MACH" in
  arm64)  DMGARCH="aarch64" ;;
  x86_64) DMGARCH="x86_64" ;;
  *) echo "Arsitektur $MACH tidak dikenal."; exit 1 ;;
esac
echo "[1/6] Arsitektur: $MACH"

WORKDIR="$(mktemp -d)"
DMG="rustdesk-${RD_VER}-${DMGARCH}.dmg"
MOUNT="/Volumes/RustDesk"

echo "[2/6] Mengunduh $DMG ..."
OK=""
for U in "https://rd.dataonlive.com/download/$DMG" \
         "https://github.com/rustdesk/rustdesk/releases/download/${RD_VER}/$DMG"; do
    echo "       mencoba: $U"
    if curl -fL --retry 2 --connect-timeout 20 -o "$WORKDIR/$DMG" "$U" 2>/dev/null; then
        SIZE=$(stat -f%z "$WORKDIR/$DMG" 2>/dev/null || echo 0)
        [ "$SIZE" -gt 5000000 ] && { OK=1; break; }
    fi
done
[ -n "$OK" ] || { echo "GAGAL mengunduh RustDesk."; exit 1; }

echo "[3/6] Memasang aplikasi ..."
hdiutil detach "$MOUNT" >/dev/null 2>&1 || true
hdiutil attach "$WORKDIR/$DMG" -nobrowse -quiet || { echo "Gagal mount DMG."; exit 1; }
rm -rf "/Applications/RustDesk.app"
cp -R "$MOUNT/RustDesk.app" /Applications/ || { hdiutil detach "$MOUNT" -quiet; echo "Gagal copy app."; exit 1; }
hdiutil detach "$MOUNT" -quiet
chown -R root:wheel /Applications/RustDesk.app
RD_BIN="/Applications/RustDesk.app/Contents/MacOS/rustdesk"

echo "[4/6] Mengarahkan ke server ${RD_HOST} ..."
"$RD_BIN" --config "$RD_CFG" >/dev/null 2>&1 || true
sleep 2

if [ -z "$RD_PASSWORD" ]; then
    RD_PASSWORD="$(LC_ALL=C tr -dc 'A-HJ-NP-Za-kmnp-z2-9' </dev/urandom | head -c 10)"
fi
"$RD_BIN" --password "$RD_PASSWORD" >/dev/null 2>&1 || true

write_toml() {
    T="$1"; [ -z "$T" ] && return 0
    mkdir -p "$T" 2>/dev/null || return 0
    cat > "$T/RustDesk2.toml" <<EOF
rendezvous_server = '${RD_HOST}'
nat_type = 1
serial = 0

[options]
custom-rendezvous-server = '${RD_HOST}'
relay-server = '${RD_HOST}'
key = '${RD_KEY}'
EOF
}
write_toml "/var/root/Library/Preferences/com.carriez.RustDesk"
write_toml "${SUDO_USER:+/Users/$SUDO_USER/Library/Preferences/com.carriez.RustDesk}"

echo "[5/6] Menjalankan RustDesk ..."
open -a RustDesk >/dev/null 2>&1 || true
sleep 10

echo "[6/6] Mengambil ID perangkat ..."
RD_ID="$("$RD_BIN" --get-id 2>/dev/null | tail -1)"
[ -z "$RD_ID" ] && { sleep 8; RD_ID="$("$RD_BIN" --get-id 2>/dev/null | tail -1)"; }

echo "[7/7] Mengirim data perangkat ke server monitoring ..."
RD_HOSTN="$(scutil --get ComputerName 2>/dev/null || hostname)"
RD_USER="${SUDO_USER:-$(id -un)}"
RD_OS="$(sw_vers -productName 2>/dev/null) $(sw_vers -productVersion 2>/dev/null)"
REPORT_JSON=$(printf '{"token":"%s","rd_id":"%s","hostname":"%s","username":"%s","platform":"%s","os_version":"%s","client_ver":"%s"}' "$RD_TOKEN" "$RD_ID" "$RD_HOSTN" "$RD_USER" "$RD_OS" "$(uname -r)" "$RD_VER")
curl -s -m 25 -X POST -H 'Content-Type: application/json' -d "$REPORT_JSON" "$RD_REPORT" >/dev/null 2>&1 && echo "       laporan terkirim" || echo "       (laporan gagal - instalasi tetap sukses)"

INFO="/tmp/INFO-RUSTDESK.txt"
cat > "$INFO" <<EOF
===== INFORMASI RUSTDESK PERANGKAT INI =====

ID Server    : ${RD_HOST}
Key          : ${RD_KEY}

ID Perangkat : ${RD_ID}
Password     : ${RD_PASSWORD}

Nama Mac     : $(scutil --get ComputerName 2>/dev/null || hostname)
Waktu        : $(date)
============================================
EOF
[ -n "${SUDO_USER:-}" ] && cp "$INFO" "/Users/$SUDO_USER/Desktop/INFO-RUSTDESK.txt" 2>/dev/null || true

echo
echo "=========================================================="
echo "                 INSTALASI SELESAI (BERHASIL)"
echo "=========================================================="
echo
echo "   Server       : ${RD_HOST}"
echo
echo "   >> ID PERANGKAT : ${RD_ID}"
echo "   >> PASSWORD     : ${RD_PASSWORD}"
echo
echo "   (tersimpan juga di: $INFO)"
echo
echo "   !! LANGKAH WAJIB (sekali saja, manual) !!"
echo "   Buka: System Settings > Privacy & Security, lalu IZINKAN RustDesk pada:"
echo "     1. Screen Recording"
echo "     2. Accessibility"
echo "   Tanpa ini, layar akan tampil hitam saat di-remote."
echo
echo "   Kirim ID dan Password di atas ke admin."
echo
