@echo off
setlocal EnableExtensions
title Claude Code Provider Switcher

set "PROVIDER=%~1"
if "%PROVIDER%"=="" set "PROVIDER=%CLAUDE_SWITCH_PROVIDER%"

set "SCRIPT_URL=https://tumpai-handbook.pages.dev/switch-claude.ps1"
set "SCRIPT_FILE=%TEMP%\claude-provider-switch.ps1"
set "LOG_FILE=%TEMP%\claude-provider-switch-cmd.log"
set "PS_EXE=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"

echo Claude Code Provider Switcher
echo =============================
echo.
if not "%PROVIDER%"=="" echo Target provider: %PROVIDER%
echo This wrapper keeps the window open even if download or PowerShell fails.
echo Log file: %LOG_FILE%
echo.
echo Started at %DATE% %TIME% > "%LOG_FILE%"

echo [1/3] Downloading switcher...
echo [1/3] Downloading switcher... >> "%LOG_FILE%"

del "%SCRIPT_FILE%" >nul 2>nul

curl.exe -L -f -o "%SCRIPT_FILE%" "%SCRIPT_URL%" >> "%LOG_FILE%" 2>&1
if errorlevel 1 (
  echo curl.exe failed. Trying certutil...
  echo curl.exe failed. Trying certutil... >> "%LOG_FILE%"
  del "%SCRIPT_FILE%" >nul 2>nul
  certutil -urlcache -split -f "%SCRIPT_URL%" "%SCRIPT_FILE%" >> "%LOG_FILE%" 2>&1
)

if not exist "%SCRIPT_FILE%" (
  echo.
  echo ERROR: Failed to download switcher.
  echo ERROR: Failed to download switcher. >> "%LOG_FILE%"
  goto :fail
)

for %%A in ("%SCRIPT_FILE%") do set "SCRIPT_SIZE=%%~zA"
if "%SCRIPT_SIZE%"=="0" (
  echo.
  echo ERROR: Downloaded switcher is empty.
  echo ERROR: Downloaded switcher is empty. >> "%LOG_FILE%"
  goto :fail
)

echo [2/3] Running PowerShell switcher...
echo [2/3] Running PowerShell switcher... >> "%LOG_FILE%"

if not exist "%PS_EXE%" (
  echo.
  echo ERROR: powershell.exe was not found at %PS_EXE%
  echo ERROR: powershell.exe was not found at %PS_EXE% >> "%LOG_FILE%"
  goto :fail
)

set "CLAUDE_SWITCH_NO_PAUSE=1"
if "%PROVIDER%"=="" (
  "%PS_EXE%" -NoLogo -NoProfile -ExecutionPolicy Bypass -File "%SCRIPT_FILE%"
) else (
  "%PS_EXE%" -NoLogo -NoProfile -ExecutionPolicy Bypass -File "%SCRIPT_FILE%" -Provider "%PROVIDER%"
)
set "SWITCH_EXIT=%ERRORLEVEL%"

echo PowerShell switcher exit code: %SWITCH_EXIT% >> "%LOG_FILE%"

if not "%SWITCH_EXIT%"=="0" (
  echo.
  echo ERROR: PowerShell switcher failed with exit code %SWITCH_EXIT%.
  echo ERROR: PowerShell switcher failed with exit code %SWITCH_EXIT%. >> "%LOG_FILE%"
  goto :fail
)

echo.
echo [3/3] Done.
echo [3/3] Done. >> "%LOG_FILE%"
echo.
echo Close this window and open a new PowerShell window before running claude.
echo.
if not "%CLAUDE_SWITCH_CMD_NO_PAUSE%"=="1" pause
goto :eof

:fail
echo.
echo Switch did not complete.
echo See log: %LOG_FILE%
echo.
if not "%CLAUDE_SWITCH_CMD_NO_PAUSE%"=="1" pause
goto :eof
