#!/usr/bin/env bash
# =====================================================================
#  INSTALLER RUSTDESK OTOMATIS (Linux) - server sendiri
#  Server : rd.dataonlive.com
#  Pakai  : sudo bash install-rustdesk.sh
# =====================================================================
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
# ---------------------------------------------

[ "$(id -u)" -eq 0 ] || exec sudo bash "$0" "$@"

C_B=$'\033[1;36m'; C_Y=$'\033[1;33m'; C_G=$'\033[1;32m'; C_R=$'\033[1;31m'; C_0=$'\033[0m'
echo
echo "${C_B}==========================================================${C_0}"
echo "${C_B}  INSTALASI RUSTDESK - MENGHUBUNGKAN KE SERVER KANTOR${C_0}"
echo "${C_B}  Server : ${RD_HOST}${C_0}"
echo "${C_B}==========================================================${C_0}"

ARCH="$(uname -m)"
case "$ARCH" in
  x86_64|amd64)  PKGARCH="x86_64" ;;
  aarch64|arm64) PKGARCH="aarch64" ;;
  *) echo "${C_R}Arsitektur $ARCH belum didukung skrip ini.${C_0}"; exit 1 ;;
esac
echo "${C_Y}[1/6]${C_0} Arsitektur: $ARCH"

WORKDIR="$(mktemp -d)"
cleanup() { rm -rf "$WORKDIR"; }
trap cleanup EXIT

# --- pilih jenis paket ---
if command -v apt-get >/dev/null 2>&1; then
    EXT="deb"; INSTALL_CMD="apt-get install -y"
elif command -v dnf >/dev/null 2>&1; then
    EXT="rpm"; INSTALL_CMD="dnf install -y"
elif command -v yum >/dev/null 2>&1; then
    EXT="rpm"; INSTALL_CMD="yum install -y"
elif command -v pacman >/dev/null 2>&1; then
    EXT="pkg.tar.zst"; INSTALL_CMD="pacman -U --noconfirm"
else
    echo "${C_R}Tidak mengenali manajer paket. Pakai .deb/.rpm manual.${C_0}"; exit 1
fi

PKG="rustdesk-${RD_VER}-${PKGARCH}.${EXT}"
if [ "$EXT" = "pkg.tar.zst" ]; then PKG="rustdesk-${RD_VER}-0-${PKGARCH}.pkg.tar.zst"; fi

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

echo "${C_Y}[3/6]${C_0} Memasang paket ..."
if [ "$EXT" = "deb" ]; then
    apt-get install -y "$WORKDIR/$PKG" >/dev/null 2>&1 || dpkg -i "$WORKDIR/$PKG" >/dev/null 2>&1
else
    $INSTALL_CMD "$WORKDIR/$PKG" >/dev/null 2>&1
fi
command -v rustdesk >/dev/null 2>&1 || { echo "${C_R}RustDesk tidak terpasang.${C_0}"; exit 1; }

RD_BIN="$(command -v rustdesk)"

echo "${C_Y}[4/6]${C_0} Mengarahkan ke server ${RD_HOST} ..."
systemctl stop rustdesk 2>/dev/null || true
sleep 2

"$RD_BIN" --config "$RD_CFG" >/dev/null 2>&1 || true
sleep 2

if [ -z "$RD_PASSWORD" ]; then
    RD_PASSWORD="$(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

# --- tulis config untuk user sesi DAN untuk root (service) ---
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 "/root/.config/rustdesk"
write_toml "${SUDO_USER:+/home/$SUDO_USER/.config/rustdesk}"
write_toml "${HOME:+$HOME/.config/rustdesk}"

echo "${C_Y}[5/6]${C_0} Menjalankan service ..."
systemctl enable --now rustdesk >/dev/null 2>&1 || true
sleep 8

echo "${C_Y}[6/6]${C_0} 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_OS="$( (. /etc/os-release 2>/dev/null && echo "$PRETTY_NAME") || uname -s )"
RD_HOSTN="$(hostname)"
RD_USER="${SUDO_USER:-$(id -un)}"
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="$HOME/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 Host    : $(hostname)
Waktu        : $(date)
============================================
EOF

echo
echo "${C_G}==========================================================${C_0}"
echo "${C_G}                 INSTALASI SELESAI (BERHASIL)${C_0}"
echo "${C_G}==========================================================${C_0}"
echo
echo "   Server       : ${RD_HOST}"
echo
echo "${C_Y}   >> ID PERANGKAT : ${RD_ID}${C_0}"
echo "${C_Y}   >> PASSWORD     : ${RD_PASSWORD}${C_0}"
echo
echo "   (tersimpan juga di: $INFO)"
echo
echo "   Kirim ID dan Password di atas ke admin."
echo
