@echo off
setlocal
chcp 936 >nul
cd /d "%~dp0"

rem -------------------------
rem 提权保护：避免无限循环并兼容多种环境
rem 如果脚本被带上参数 ELEVATED 则认为已经提权
if /i "%~1"=="ELEVATED" goto :after_elevate

rem 首选检查管理员身份（多个检测方法兜底）
>nul 2>&1 fltmc && goto :after_elevate
whoami /groups | find "S-1-5-32-544" >nul 2>&1 && goto :after_elevate

rem 需要提权：先用 PowerShell 提权（若可用），否则用 mshta 做兜底
where powershell >nul 2>&1 && (
  powershell -NoProfile -ExecutionPolicy Bypass -Command ^
    "Start-Process -FilePath '%~f0' -WorkingDirectory '%~dp0' -Verb RunAs -ArgumentList 'ELEVATED'"
) || (
  mshta "vbscript:CreateObject(""Shell.Application"").ShellExecute(""%~f0"",""ELEVATED"","""",""runas"",1)(close)"
)
exit /b

:after_elevate
rem -------------------------
rem 关键路径自检，防止压缩包内运行或被防护软件隔离
if not exist "%~dp0singbox" (
  echo [错误] 未找到目录：%~dp0singbox
  echo 请先完整解压到本地磁盘，不要在压缩包内直接运行。
  pause
  exit /b
)
if not exist "%~dp0singbox\sing-box.exe" (
  echo [错误] 未找到：%~dp0singbox\sing-box.exe
  echo 可能被安全软件隔离/删除，请检查防毒软件的隔离/历史并加入排除项。
  pause
  exit /b
)

rem -------------------------

title SingBox 一键启动

echo 是否执行IP更新？IP更新从云端更新IP配置以解决封锁问题！
echo 按3跳过，按1选择ip1更新，若ip1不好用再按2选ip2更新，如果更新后都用不了，请发邮件到rebeccalane27@gmail.com进行反馈！
choice /C 123 /T 15 /D 3 /M "1、ip1更新  2、ip2更新  3、跳过"
if errorlevel 3 goto startfq
if errorlevel 2 goto ip2
if errorlevel 1 goto ip1

:ip2
start /wait "" "%~dp0singbox\ip_Update\ip_2.bat"
goto startfq

:ip1
start /wait "" "%~dp0singbox\ip_Update\ip_1.bat"
goto startfq

:startfq

echo 等待 SingBox 启动，请稍候...
start "" /D "%~dp0singbox" "%~dp0singbox\sing-box.exe" run -c "%~dp0singbox\config.json"
if exist "%~dp0App\chrome.exe" (
  start "" /D "%~dp0App" "%~dp0App\chrome.exe" --proxy-server="socks5://127.0.0.1:1080"
)

echo 完成。按空格或回车键退出。
pause