@echo off
setlocal EnableExtensions EnableDelayedExpansion
title Installer RustDesk - Remote Support
color 0B

REM ================================================================
REM   INSTALLER RUSTDESK OTOMATIS  (server sendiri - self hosted)
REM   ID Server : rd.dataonlive.com
REM   Cara pakai: klik 2x file ini, izinkan Administrator, tunggu.
REM   Hasil: RustDesk terpasang + langsung terhubung ke server kita.
REM ================================================================

set "RD_HOST=rd.dataonlive.com"
set "RD_KEY=sHpOcK12ZiiwxYj0jmHQHOBkJu6ws3YeL7oxGReZqNw="
set "RD_TOKEN=xADXKCnzwZLRPLEByY3EkNYTWptUHomJ"
set "RD_CFG==Qfi0zdOFnWlJ1R492NMVWWzM3d2UnSrJ0TIFFStpGMqlFe3lWaaJTMLN2Twh0ciojI5V2aiwiIiojIpBXYiwiIt92YuUmdpxmbvFGdhRmLkJnI6ISehxWZyJCLi02bj5SZ2lGbu9WY0FGZuQmciojI0N3boJye"

REM --- PASSWORD TETAP: kosongkan untuk password acak, atau isi agar sama di semua PC ---
set "RD_PASSWORD="

set "RD_VER=1.4.9"
set "WORKDIR=C:\Temp\RustDesk-Setup"
set "DLEXE=%WORKDIR%\rustdesk.exe"
set "RDEXE=%ProgramFiles%\RustDesk\rustdesk.exe"
set "LOG=%WORKDIR%\install-log.txt"

REM ================= JANGAN UBAH DI BAWAH INI =====================

REM --- 1. minta hak Administrator ---
net session >nul 2>&1
if errorlevel 1 (
    echo.
    echo   Meminta izin Administrator... klik "Yes" pada kotak yang muncul.
    echo.
    powershell -NoProfile -Command "Start-Process -FilePath '%~f0' -Verb RunAs" >nul 2>&1
    exit /b
)

if not exist "%WORKDIR%" mkdir "%WORKDIR%" >nul 2>&1
echo ================ INSTALASI RUSTDESK ================ > "%LOG%"
echo Waktu  : %DATE% %TIME% >> "%LOG%"
echo Server : %RD_HOST% >> "%LOG%"
echo ==================================================== >> "%LOG%"

cls
echo.
echo  ==========================================================
echo    INSTALASI RUSTDESK - MENGHUBUNGKAN KE SERVER KANTOR
echo    Server : %RD_HOST%
echo  ==========================================================
echo.

REM --- 2. deteksi arsitektur ---
set "ARCH=x86_64"
if /i "%PROCESSOR_ARCHITECTURE%"=="ARM64" set "ARCH=aarch64"
if /i "%PROCESSOR_ARCHITECTURE%"=="x86" set "ARCH=x86-sciter"
echo  [1/8] Arsitektur komputer : %ARCH%
echo  [1/8] Arsitektur: %ARCH% >> "%LOG%"

REM --- 3. unduh RustDesk (coba beberapa sumber) ---
echo  [2/8] Mengunduh RustDesk %RD_VER% ...
set "URL1=https://rd.dataonlive.com/download/rustdesk-%RD_VER%-%ARCH%.exe"
set "URL2=https://github.com/rustdesk/rustdesk/releases/download/%RD_VER%/rustdesk-%RD_VER%-%ARCH%.exe"

where curl >nul 2>&1
if errorlevel 1 (set "USEPS=1") else (set "USEPS=")

set "OK="
for %%U in ("%URL1%" "%URL2%") do (
    if not defined OK (
        echo        mencoba: %%~U
        if defined USEPS (
            powershell -NoProfile -Command "try{Invoke-WebRequest -Uri '%%~U' -OutFile (Join-Path '%WORKDIR%' 'rustdesk.exe') -UseBasicParsing -TimeoutSec 180}catch{exit 1}" 2>>"%LOG%"
        ) else (
            curl -L --fail --silent --show-error --retry 2 --connect-timeout 25 -o "%DLEXE%" "%%~U" 2>>"%LOG%"
        )
        if exist "%DLEXE%" for %%S in ("%DLEXE%") do if %%~zS GTR 5000000 set "OK=1"
    )
)

if not defined OK (
    echo.
    echo    GAGAL mengunduh RustDesk. Periksa koneksi internet, lalu jalankan ulang.
    echo    GAGAL unduh >> "%LOG%"
    echo.
    pause
    exit /b 1
)
echo        berhasil diunduh.
echo  [2/8] unduh OK >> "%LOG%"

REM --- 4. install senyap + service ---
echo  [3/8] Memasang RustDesk (mode senyap)...
"%DLEXE%" --silent-install >>"%LOG%" 2>&1
timeout /t 20 /nobreak >nul

echo  [4/8] Memasang service (agar bisa diakses tanpa login)...
if exist "%RDEXE%" (
    "%RDEXE%" --install-service >>"%LOG%" 2>&1
) else (
    echo        PERINGATAN: %RDEXE% tidak ditemukan >> "%LOG%"
)
timeout /t 12 /nobreak >nul

REM --- 5. hentikan service sementara agar config pasti terbaca ---
net stop RustDesk >nul 2>&1
timeout /t 5 /nobreak >nul

REM --- 6. terapkan server + key + password ---
echo  [5/8] Mengarahkan ke server %RD_HOST% ...

if exist "%RDEXE%" (
    "%RDEXE%" --config "%RD_CFG%" >>"%LOG%" 2>&1
    timeout /t 3 /nobreak >nul
)

if defined RD_PASSWORD (
    set "RDPW=%RD_PASSWORD%"
) else (
    call :randompw
)
if exist "%RDEXE%" (
    "%RDEXE%" --password "%RDPW%" >>"%LOG%" 2>&1
)

REM --- 7. tulis file config juga (jaminan ganda: user + service + programdata) ---
call :write_toml "%APPDATA%\RustDesk\config"
call :write_toml "C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config"
call :write_toml "%ProgramData%\RustDesk\config"

REM --- 8. hidupkan service ---
echo  [6/8] Menjalankan service...
net start RustDesk >nul 2>&1
if errorlevel 1 sc start RustDesk >nul 2>&1
timeout /t 12 /nobreak >nul

REM --- 9. ambil ID perangkat ---
echo  [7/8] Mengambil ID perangkat...
set "RD_ID="
if exist "%RDEXE%" (
    for /f "delims=" %%i in ('"%RDEXE%" --get-id 2^>nul') do set "RD_ID=%%i"
)

REM --- 9b. lapor ke server monitoring ---
echo  [8/8] Mengirim data perangkat ke server monitoring...
set "PSREPORT=$b=@{token='%RD_TOKEN%';rd_id='%RD_ID%';hostname=$env:COMPUTERNAME;username=$env:USERNAME;platform=(Get-CimInstance Win32_OperatingSystem).Caption;os_version=[string][Environment]::OSVersion.Version;client_ver='%RD_VER%'};$j=ConvertTo-Json -InputObject $b -Compress;try{$r=Invoke-RestMethod -Uri 'https://rd.dataonlive.com/api/report' -Method Post -Body $j -ContentType 'application/json' -TimeoutSec 25;Write-Host '       laporan terkirim'}catch{Write-Host '       (laporan gagal - instalasi tetap sukses)'}"
powershell -NoProfile -Command "%PSREPORT%" >>"%LOG%" 2>&1

set "INFO=%WORKDIR%\INFO-RUSTDESK.txt"
> "%INFO%" (
    echo ===== INFORMASI RUSTDESK PERANGKAT INI =====
    echo.
    echo ID Server    : %RD_HOST%
    echo Key          : %RD_KEY%
    echo.
    echo ID Perangkat : %RD_ID%
    echo Password     : %RDPW%
    echo.
    echo Nama PC      : %COMPUTERNAME%
    echo Waktu        : %DATE% %TIME%
    echo.
    echo KIRIM file ini ke admin.
    echo =============================================
)
>> "%LOG%" echo ID=%RD_ID% PASSWORD=%RDPW%

echo.
echo  ==========================================================
echo                 INSTALASI SELESAI  ^(BERHASIL^)
echo  ==========================================================
echo.
echo    Server       : %RD_HOST%
echo.
echo    ^>^>  ID PERANGKAT INI  :  %RD_ID%
echo    ^>^>  PASSWORD           :  %RDPW%
echo.
echo    ^(ID ^& password juga tersimpan di:^)
echo      %INFO%
echo.
echo    Langkah berikutnya:
echo      1. Kirim ID dan Password di atas ke admin.
echo      2. Tunggu admin melakukan remote ke komputer ini.
echo.
echo    CATATAN: bila muncul kotak izin "Windows Security / Firewall",
echo             pilih Allow.
echo.
echo  ==========================================================
echo.
echo  Tekan tombol APA SAJA untuk menutup jendela ini...
pause >nul
exit /b 0

REM ================= SUBROUTINE =================
:write_toml
set "TDIR=%~1"
if not exist "%TDIR%" mkdir "%TDIR%" >nul 2>&1
(
echo rendezvous_server = '%RD_HOST%'
echo nat_type = 1
echo serial = 0
echo.
echo [options]
echo custom-rendezvous-server = '%RD_HOST%'
echo relay-server = '%RD_HOST%'
echo key = '%RD_KEY%'
) > "%TDIR%\RustDesk2.toml" 2>nul
exit /b 0

:randompw
set "_A=ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789"
set "RDPW="
for /l %%n in (1,1,10) do (
    set /a _i=!random! %% 58
    for /f "delims=" %%c in ("!_i!") do set "RDPW=!RDPW!!_A:~%%c,1!"
)
exit /b 0
