@ECHO OFF
SETLOCAL EnableDelayedExpansion

SET "PACKAGENAME=tt-help-cli-ycl"
SET "CONFIG_PATH=%USERPROFILE%\.tt-help.json"

ECHO ========================================
ECHO   tt-help-cli-ycl one-click launcher (Windows CMD)
ECHO ========================================

REM ---------- 0. Auto-select server based on local IP ----------
SET "TARGET_SERVER=http://117.71.53.99:17301"
SET "LOCAL_IP="
SET "GET_IP_PS1=%TEMP%\tt_get_local_ip.ps1"
>"%GET_IP_PS1%" ECHO $ip = $null
>>"%GET_IP_PS1%" ECHO try {
>>"%GET_IP_PS1%" ECHO   $ip = Get-WmiObject Win32_NetworkAdapterConfiguration ^| Where-Object { $_.IPEnabled -eq $true } ^| ForEach-Object { $_.IPAddress } ^| Where-Object { $_ -match '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' -and $_ -ne '127.0.0.1' -and $_ -notlike '169.254.*' } ^| Select-Object -First 1
>>"%GET_IP_PS1%" ECHO } catch {}
>>"%GET_IP_PS1%" ECHO if (-not $ip) {
>>"%GET_IP_PS1%" ECHO   try {
>>"%GET_IP_PS1%" ECHO     $ip = Get-NetIPAddress -AddressFamily IPv4 -ErrorAction Stop ^| Where-Object { $_.IPAddress -ne '127.0.0.1' -and $_.IPAddress -notlike '169.254.*' } ^| Select-Object -First 1 -ExpandProperty IPAddress
>>"%GET_IP_PS1%" ECHO   } catch {}
>>"%GET_IP_PS1%" ECHO }
>>"%GET_IP_PS1%" ECHO if (-not $ip) {
>>"%GET_IP_PS1%" ECHO   try {
>>"%GET_IP_PS1%" ECHO     $ip = [System.Net.Dns]::GetHostAddresses([System.Net.Dns]::GetHostName()) ^| Where-Object { $_.AddressFamily -eq [System.Net.Sockets.AddressFamily]::InterNetwork -and $_.IPAddressToString -ne '127.0.0.1' -and $_.IPAddressToString -notlike '169.254.*' } ^| Select-Object -First 1 -ExpandProperty IPAddressToString
>>"%GET_IP_PS1%" ECHO   } catch {}
>>"%GET_IP_PS1%" ECHO }
>>"%GET_IP_PS1%" ECHO if ($ip) { [Console]::Write($ip) }
FOR /F "usebackq delims=" %%I IN (`powershell -NoProfile -ExecutionPolicy Bypass -File "%GET_IP_PS1%"`) DO (
    SET "LOCAL_IP=%%I"
)

ECHO [INFO] Local IP: %LOCAL_IP%

IF DEFINED LOCAL_IP IF "%LOCAL_IP:~0,11%"=="172.18.154." SET "TARGET_SERVER=http://172.18.154.201:3001"

IF NOT DEFINED LOCAL_IP (
    ECHO [INFO] No local IPv4 detected, using public server
) ELSE IF "%LOCAL_IP:~0,11%"=="172.18.154." (
    ECHO [INFO] Intranet IP detected, using intranet server
) ELSE (
    ECHO [INFO] No intranet IP detected, using public server
)
DEL "%GET_IP_PS1%" 2>NUL

REM ---------- 1. Check/install latest version ----------
FOR /F "delims=" %%V IN ('npm view %PACKAGENAME% version 2^>nul') DO SET "LATEST_VERSION=%%V"

IF NOT DEFINED LATEST_VERSION (
    ECHO [ERROR] Cannot get latest version from npm
    EXIT /B 1
)

FOR /F "tokens=2 delims=@" %%V IN ('npm list -g %PACKAGENAME% --depth=0 2^>nul ^| findstr /i "%PACKAGENAME%"') DO SET "INSTALLED_VERSION=%%V"

IF NOT DEFINED INSTALLED_VERSION (
    ECHO [INFO] %PACKAGENAME% not installed, installing latest...
    CALL npm install -g %PACKAGENAME%
    IF %ERRORLEVEL% EQU 0 (
        ECHO [OK] Installed: %LATEST_VERSION%
    ) ELSE (
        ECHO [ERROR] Install failed, run manually: npm install -g %PACKAGENAME%
        EXIT /B 1
    )
) ELSE IF "%INSTALLED_VERSION%"=="%LATEST_VERSION%" (
    ECHO [OK] %PACKAGENAME% is up to date: %LATEST_VERSION%
) ELSE (
    ECHO [INFO] Current: %INSTALLED_VERSION%, Latest: %LATEST_VERSION%
    ECHO [INFO] Upgrading to latest...
    CALL npm install -g %PACKAGENAME%
    IF %ERRORLEVEL% EQU 0 (
        ECHO [OK] Upgraded: %LATEST_VERSION%
    ) ELSE (
        ECHO [WARN] Upgrade failed, run manually: npm install -g %PACKAGENAME%
    )
)

REM ---------- 2. Check/set server config ----------
SET "CURRENT_SERVER="
IF EXIST "%CONFIG_PATH%" (
    FOR /F "usebackq delims=" %%S IN (`powershell -NoProfile -Command "$p=$env:CONFIG_PATH; if (Test-Path $p) { try { $cfg = Get-Content $p -Raw | ConvertFrom-Json; if ($null -ne $cfg.server) { [Console]::Write($cfg.server) } } catch {} }"`) DO SET "CURRENT_SERVER=%%S"
)

IF "%CURRENT_SERVER%"=="%TARGET_SERVER%" (
    ECHO [OK] Server config is correct: %TARGET_SERVER%
) ELSE (
    IF "%CURRENT_SERVER%"=="" (
        ECHO [INFO] Current server: not set, target: %TARGET_SERVER%
    ) ELSE (
        ECHO [INFO] Current server: %CURRENT_SERVER%, target: %TARGET_SERVER%
    )
    ECHO [INFO] Setting server config...
    node -e "const fs=require('fs'),path=require('path');const p=path.join(require('os').homedir(),'.tt-help.json');let c={};try{c=JSON.parse(fs.readFileSync(p,'utf-8'))}catch(e){}c.server='%TARGET_SERVER%';fs.writeFileSync(p,JSON.stringify(c,null,2),'utf-8');console.log('  Written to: '+p);"
    ECHO [OK] Server config set
)

REM ---------- 3. Ask user for parameters ----------
ECHO.
ECHO ========================================
ECHO   Parameter Configuration
ECHO ========================================

SET /P "BASE_PORT=Base port (--base-port) [default: 9222]: "
IF "%BASE_PORT%"=="" SET "BASE_PORT=9222"

SET /P "PORT_COUNT=Port count (--port-count) [default: 10]: "
IF "%PORT_COUNT%"=="" SET "PORT_COUNT=10"

SET /P "JOB_LOCATIONS=Job locations (--job-locations) [default: none]: "
SET "JOB_LOC_ARGS="
IF NOT "%JOB_LOCATIONS%"=="" SET "JOB_LOC_ARGS=--job-locations %JOB_LOCATIONS%"

REM ---------- 4. Get user ID from config and compose ----------
SET "CONFIG_USER_ID=user"
IF EXIST "%CONFIG_PATH%" (
    FOR /F "usebackq delims=" %%S IN (`powershell -NoProfile -Command "$p=$env:CONFIG_PATH; if (Test-Path $p) { try { $cfg = Get-Content $p -Raw | ConvertFrom-Json; if ($null -ne $cfg.userId) { [Console]::Write($cfg.userId) } } catch {} }"`) DO SET "CONFIG_USER_ID=%%S"
)
CALL SET "USER_ID=%%CONFIG_USER_ID%%_%%BASE_PORT%%_%%PORT_COUNT%%"

REM ---------- 5. Start tt-help explore ----------
ECHO.
ECHO ========================================
ECHO   Starting tt-help explore
ECHO ========================================
CALL ECHO   User ID: %%USER_ID%%
CALL ECHO   Base port: %%BASE_PORT%%
CALL ECHO   Port count: %%PORT_COUNT%%
IF NOT "%JOB_LOCATIONS%"=="" ECHO   Job locations: %JOB_LOCATIONS%
ECHO   Max following: 5
ECHO   Max followers: 5
ECHO   Speed: stealth (slowest)
ECHO ========================================
CALL tt-help explore stealth --user-id %%USER_ID%% --base-port %%BASE_PORT%% --port-count %%PORT_COUNT%% --max-following 5 --max-followers 5 %%JOB_LOC_ARGS%%
