@echo off
setlocal

set "ROOT_DIR=%~dp0"
set "CONFIG_FILE=%ROOT_DIR%config\cloudflare-access.env"
set "EXAMPLE_FILE=%ROOT_DIR%config\cloudflare-access.example.env"
set "FIREFOX_EXE="
set "SSH_PORT=3443"
set "SOCKS_PORT=1080"

echo.
echo RATO - CHECAGEM RAPIDA
echo ======================
echo.
echo Este teste nao liga o tunel.
echo Ele so confere se o computador esta pronto.
echo.

if not exist "%CONFIG_FILE%" (
    if exist "%EXAMPLE_FILE%" (
        copy "%EXAMPLE_FILE%" "%CONFIG_FILE%" >nul
        if errorlevel 1 (
            echo [ERRO] Nao consegui criar "%CONFIG_FILE%".
        ) else (
            echo [OK] Arquivo de configuracao criado a partir do exemplo.
        )
    ) else (
        echo [ERRO] Arquivo de exemplo nao encontrado: "%EXAMPLE_FILE%"
    )
) else (
    echo [OK] Arquivo de configuracao encontrado.
)

if exist "%CONFIG_FILE%" (
    for /f "usebackq tokens=1,* delims==" %%A in ("%CONFIG_FILE%") do (
        if /I "%%A"=="SSH_PORT" set "SSH_PORT=%%B"
        if /I "%%A"=="LOCAL_SOCKS_PORT" set "SOCKS_PORT=%%B"
    )
)

where cloudflared.exe >nul 2>nul
if errorlevel 1 (
    where cloudflared >nul 2>nul
)
if errorlevel 1 (
    echo [ERRO] cloudflared nao foi encontrado no PATH.
    echo       Instale o cloudflared ou coloque cloudflared.exe no PATH do usuario.
) else (
    echo [OK] cloudflared encontrado no PATH.
)

if exist "C:\Program Files\Mozilla Firefox\firefox.exe" set "FIREFOX_EXE=C:\Program Files\Mozilla Firefox\firefox.exe"
if not defined FIREFOX_EXE if exist "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" set "FIREFOX_EXE=C:\Program Files (x86)\Mozilla Firefox\firefox.exe"

if defined FIREFOX_EXE (
    echo [OK] Firefox encontrado:
    echo      "%FIREFOX_EXE%"
) else (
    echo [ERRO] Firefox nao foi encontrado nos caminhos padrao.
    echo       Instale o Mozilla Firefox ou configure FIREFOX_PATH no arquivo config\cloudflare-access.env.
)

set "RATO_CHECK_SSH_PORT=%SSH_PORT%"
set "RATO_CHECK_SOCKS_PORT=%SOCKS_PORT%"
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "$ports=@($env:RATO_CHECK_SSH_PORT,$env:RATO_CHECK_SOCKS_PORT) | Where-Object { $_ } | Select-Object -Unique; $bad=$false; foreach($portValue in $ports){ $port=0; if(-not [int]::TryParse($portValue,[ref]$port)){ Write-Host ('[AVISO] Porta invalida na configuracao: ' + $portValue); $bad=$true; continue }; $busy=$false; try { $c=Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction SilentlyContinue; if ($c) { $busy=$true } } catch { try { $l=[System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Loopback,$port); $l.Start(); $l.Stop(); $busy=$false } catch { $busy=$true } }; if ($busy) { Write-Host ('[AVISO] A porta ' + $port + ' parece estar em uso.'); $bad=$true } else { Write-Host ('[OK] A porta ' + $port + ' parece livre.') } }; if($bad){ exit 2 } else { exit 0 }"
set "PORT_CHECK=%ERRORLEVEL%"
if "%PORT_CHECK%"=="1" (
    echo [AVISO] Nao consegui verificar as portas.
)

echo.
echo Verificando caminhos em todos os arquivos .env...
if exist "%ROOT_DIR%lib\scan-paths.ps1" (
    powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%ROOT_DIR%lib\scan-paths.ps1"
) else (
    echo [AVISO] scan de caminhos indisponivel.
)

echo.
echo Proximo passo:
echo Clique duas vezes em 2-ligar.vbs
echo.
echo Se o Windows bloquear VBS, clique em 2-ligar.cmd
echo.
echo Se preferir pelo CMD, digite:
echo ligar
echo.
pause
exit /b 0
