@echo off
setlocal enabledelayedexpansion
:: ============================================================
::  wstunnel Client - WireGuard over WebSocket
::  Anpassen: PROXY_SERVER = Domainname eures wstunnel-Servers
:: ============================================================

set PROXY_SERVER=vpn.example.com

:: Lokaler UDP Port fuer WireGuard (muss mit WG Endpoint uebereinstimmen)
set LOCAL_WG_PORT=51820

:: Remote WireGuard Port auf dem Server
set REMOTE_WG_PORT=51820

:: wstunnel Binary (im selben Ordner wie die BAT-Datei)
set WSTUNNEL=%~dp0wstunnel.exe

:: GitHub API
set GITHUB_API=https://api.github.com/repos/erebe/wstunnel/releases/latest

:: ============================================================

echo.
echo  ############################################
echo   wstunnel WireGuard Proxy
echo  ############################################
echo.
echo  Server : %PROXY_SERVER%
echo  Tunnel : UDP localhost:%LOCAL_WG_PORT% --^> %PROXY_SERVER%:%REMOTE_WG_PORT%
echo.

:: --- Pruefen ob wstunnel.exe vorhanden ---
if exist "%WSTUNNEL%" goto :start

echo  [!] wstunnel.exe nicht gefunden.
echo  [*] Ermittle aktuelle Version von GitHub...
echo.

:: Version per PowerShell aus GitHub API holen
for /f "usebackq delims=" %%V in (
    `powershell -NoProfile -Command "(Invoke-RestMethod -Uri '%GITHUB_API%').tag_name"`) do (
    set VERSION=%%V
)

if "!VERSION!"=="" (
    echo  [FEHLER] Konnte Version nicht ermitteln. Bitte Internetverbindung pruefen.
    pause
    exit /b 1
)

echo  [OK] Aktuelle Version: !VERSION!

:: Versionsnummer ohne fuehrendes "v" fuer Dateinamen
set VERNUM=!VERSION:~1!
set DOWNLOAD_URL=https://github.com/erebe/wstunnel/releases/download/!VERSION!/wstunnel_!VERNUM!_windows_amd64.zip
set ZIPFILE=%~dp0wstunnel_tmp.zip

echo  [*] Lade herunter: !DOWNLOAD_URL!
echo.

:: Download per PowerShell
powershell -NoProfile -Command ^
  "Invoke-WebRequest -Uri '!DOWNLOAD_URL!' -OutFile '!ZIPFILE!' -UseBasicParsing"

if not exist "!ZIPFILE!" (
    echo  [FEHLER] Download fehlgeschlagen!
    echo  Bitte manuell herunterladen und wstunnel.exe in diesen Ordner entpacken.
    pause
    exit /b 1
)

:: ZIP entpacken
echo  [*] Entpacke...
powershell -NoProfile -Command ^
  "Expand-Archive -Path '!ZIPFILE!' -DestinationPath '%~dp0' -Force"

:: Aufraeumen
del /q "!ZIPFILE!" >nul 2>&1

if not exist "%WSTUNNEL%" (
    echo  [FEHLER] wstunnel.exe nach dem Entpacken nicht gefunden!
    echo  Bitte ZIP manuell entpacken: !DOWNLOAD_URL!
    pause
    exit /b 1
)

echo  [OK] wstunnel.exe erfolgreich installiert ^(!VERSION!^).
echo.

:start
echo  Bitte WireGuard Endpoint auf 127.0.0.1:%LOCAL_WG_PORT% setzen!
echo  Fenster offen lassen solange VPN aktiv ist.
echo.
pause

"%WSTUNNEL%" client ^
  -L "udp://%LOCAL_WG_PORT%:127.0.0.1:%REMOTE_WG_PORT%?timeout_sec=0" ^
  "wss://%PROXY_SERVER%:443"

echo.
echo  wstunnel beendet.
pause
