@echo off
setlocal EnableExtensions DisableDelayedExpansion
title Instalador RustDesk - Suporte Tecnico

rem ==========================================================================
rem  CONFIGURACAO - edite apenas este bloco
rem ==========================================================================

rem Versao do RustDesk:
rem   latest  = descobre e baixa a versao mais recente publicada no GitHub
rem   1.4.2   = (exemplo) fixa uma versao especifica
set "RD_VERSION=latest"

rem String exportada de um RustDesk ja configurado
rem (Configuracoes > Rede > Exportar configuracao). Cole entre as aspas.
set "RD_CONFIG=0nI9klMz4GOsR2UUxUTmtCSjtSUQVjRmN0SCZ1KkRFWtZ0Z0VTcDhFbLlkRF5kI6ISeltmIsIici5SbvNmLy9mZul2ZvxmLrNXZkR3c1J3LvozcwRHdoJiOikGchJCLiInYu02bj5icvZmbpd2bs5yazVGZ0NXdyJiOikXYsVmciwiIyJmLt92YuI3bm5Wan9Gbus2clRGdzVnciojI0N3boJye"

rem Senha permanente (opcional). Deixe vazio para nao definir.
rem Evite o caractere de porcentagem na senha.
set "RD_PASSWORD="

rem Opcoes do instalador MSI (Y = sim, N = nao)
set "RD_DESKTOP_SHORTCUT=Y"
set "RD_INSTALL_PRINTER=N"

rem ==========================================================================
rem  NAO E NECESSARIO EDITAR ABAIXO DESTA LINHA
rem ==========================================================================

set "RD_DIR=%ProgramFiles%\RustDesk"
set "RD_EXE=%RD_DIR%\rustdesk.exe"
set "RD_LOG=%TEMP%\rustdesk-install.log"

echo.
echo  ==================================================
echo    Instalacao do RustDesk - Suporte Tecnico
echo  ==================================================
echo.

rem --- 1. Garante execucao como Administrador ------------------------------
net session >nul 2>&1
if errorlevel 1 (
    echo  Solicitando permissao de Administrador...
    powershell -NoProfile -ExecutionPolicy Bypass -Command "Start-Process -FilePath '%~f0' -Verb RunAs"
    exit /b
)

rem --- 2. Verificacoes basicas ---------------------------------------------
if "%RD_CONFIG%"=="COLE_AQUI_A_STRING_EXPORTADA" goto :err_config

if /i "%PROCESSOR_ARCHITECTURE%"=="x86" if not defined PROCESSOR_ARCHITEW6432 goto :err_32bit

rem curl: usa o do Windows ou um curl.exe colocado na mesma pasta do script
set "CURL="
if exist "%~dp0curl.exe" set "CURL=%~dp0curl.exe"
if not defined CURL (
    where curl >nul 2>&1
    if not errorlevel 1 set "CURL=curl"
)
if not defined CURL goto :err_curl

rem --- 3. Descobre a versao ------------------------------------------------
if /i not "%RD_VERSION%"=="latest" goto :have_version

echo  [1/5] Consultando a versao mais recente...
set "RD_URL="
"%CURL%" -sIL -o NUL -w "%%{url_effective}" "https://github.com/rustdesk/rustdesk/releases/latest" > "%TEMP%\rd_latest.txt" 2>nul
set /p RD_URL=<"%TEMP%\rd_latest.txt"
del /q "%TEMP%\rd_latest.txt" >nul 2>&1
if not defined RD_URL goto :err_version
set "RD_VERSION=%RD_URL:*/tag/=%"
if "%RD_VERSION%"=="%RD_URL%" goto :err_version
if "%RD_VERSION%"=="" goto :err_version

:have_version
echo        Versao: %RD_VERSION%

rem --- 4. Download do MSI --------------------------------------------------
set "RD_MSI_URL=https://github.com/rustdesk/rustdesk/releases/download/%RD_VERSION%/rustdesk-%RD_VERSION%-x86_64.msi"
set "RD_MSI=%TEMP%\rustdesk-%RD_VERSION%-x86_64.msi"

echo  [2/5] Baixando o instalador...
"%CURL%" -fL --retry 3 --retry-delay 2 -o "%RD_MSI%" "%RD_MSI_URL%"
if errorlevel 1 goto :err_download
if not exist "%RD_MSI%" goto :err_download

rem --- 5. Instalacao silenciosa --------------------------------------------
echo  [3/5] Instalando (isso pode levar um minuto)...
start "" /wait msiexec /i "%RD_MSI%" /qn /norestart INSTALLFOLDER="%RD_DIR%" CREATESTARTMENUSHORTCUTS=Y CREATEDESKTOPSHORTCUTS=%RD_DESKTOP_SHORTCUT% INSTALLPRINTER=%RD_INSTALL_PRINTER% /l*v "%RD_LOG%"
set "RC=%errorlevel%"
if "%RC%"=="3010" set "RC=0"
if not "%RC%"=="0" goto :err_install
if not exist "%RD_EXE%" goto :err_install

rem --- 6. Aguarda o servico ------------------------------------------------
echo  [4/5] Aguardando o servico do RustDesk...
set /a TRIES=0
set "SVC_FIX_DONE="
:wait_svc
sc query RustDesk | find /i "RUNNING" >nul 2>&1
if not errorlevel 1 goto :svc_ok
set /a TRIES+=1
if %TRIES% equ 5 if not defined SVC_FIX_DONE call :fix_service
if %TRIES% geq 20 goto :err_service
timeout /t 2 /nobreak >nul
goto :wait_svc

:svc_ok
rem --- 7. Aplica configuracao do servidor e senha --------------------------
echo  [5/5] Aplicando configuracao do servidor...
"%RD_EXE%" --config "%RD_CONFIG%"
if defined RD_PASSWORD "%RD_EXE%" --password "%RD_PASSWORD%"

rem Reinicia o servico para garantir que a nova configuracao seja carregada
net stop RustDesk >nul 2>&1
net start RustDesk >nul 2>&1
timeout /t 3 /nobreak >nul

rem --- 8. Obtem o ID -------------------------------------------------------
set "RD_ID="
pushd "%RD_DIR%"
for /f "delims=" %%i in ('rustdesk.exe --get-id ^| more') do set "RD_ID=%%i"
popd

del /q "%RD_MSI%" >nul 2>&1

echo.
echo  ==================================================
echo    RustDesk instalado com sucesso!
echo.
if defined RD_ID (
    echo    Informe este ID ao suporte:  %RD_ID%
) else (
    echo    Abra o RustDesk e informe ao suporte o ID exibido.
)
echo  ==================================================
echo.

start "" "%RD_EXE%"
rem pause
exit /b 0


rem ==========================================================================
rem  SUB-ROTINAS
rem ==========================================================================

:fix_service
set "SVC_FIX_DONE=1"
sc query RustDesk >nul 2>&1
if errorlevel 1 (
    echo        Registrando o servico...
    "%RD_EXE%" --install-service
) else (
    net start RustDesk >nul 2>&1
)
exit /b


rem ==========================================================================
rem  MENSAGENS DE ERRO
rem ==========================================================================

:err_config
echo.
echo  ERRO: a string de configuracao (RD_CONFIG) nao foi preenchida.
echo  Edite este arquivo e cole a configuracao exportada do RustDesk.
goto :fail

:err_32bit
echo.
echo  ERRO: este Windows e 32 bits. O instalador MSI do RustDesk e apenas 64 bits.
echo  Entre em contato com o suporte.
goto :fail

:err_curl
echo.
echo  ERRO: o programa "curl" nao foi encontrado neste computador.
echo.
echo  O curl ja vem no Windows 10 (versao 1803 ou mais nova) e no Windows 11.
echo  Para resolver, escolha uma opcao:
echo    1. Atualize o Windows pelo Windows Update e execute este arquivo de novo; ou
echo    2. Baixe o curl em https://curl.se/windows/ , extraia o arquivo curl.exe
echo       (pasta "bin") e coloque-o na MESMA pasta deste instalador; ou
echo    3. Entre em contato com o suporte.
goto :fail

:err_version
echo.
echo  ERRO: nao foi possivel descobrir a versao mais recente do RustDesk.
echo  Verifique a conexao com a internet. Se persistir, o tecnico pode fixar
echo  a versao editando a linha  set "RD_VERSION=latest"  neste arquivo.
goto :fail

:err_download
echo.
echo  ERRO: falha ao baixar o instalador:
echo    %RD_MSI_URL%
echo  Verifique a conexao com a internet ou se a versao "%RD_VERSION%" existe.
goto :fail

:err_install
echo.
echo  ERRO: a instalacao falhou (codigo %RC%).
echo  Log detalhado: %RD_LOG%
goto :fail

:err_service
echo.
echo  ERRO: o servico do RustDesk nao iniciou.
echo  Reinicie o computador e execute este arquivo novamente.
goto :fail

:fail
echo.
pause
exit /b 1
