@echo off
setlocal EnableExtensions EnableDelayedExpansion
chcp 936 >nul 2>&1
cd /d "%~dp0"

rem =========================
rem 管理员检测（稳）
rem =========================
net session >nul 2>&1 && goto :after_elevate
if /i "%~1"=="ELEVATED" goto :after_elevate

rem =========================
rem 提权：优先 WSH(VBS)，兜底 PowerShell
rem 用 FLAG 确认管理员实例真的启动，避免闪退/双开
rem =========================
set "FLAG=%temp%\clashmeta_elev_%random%%random%.flag"
> "%FLAG%" echo 1

call :TryElevateWithVBS "%FLAG%"
call :WaitFlagGone "%FLAG%" && exit /b

call :TryElevateWithPS "%FLAG%"
call :WaitFlagGone "%FLAG%" && exit /b

echo.
echo [提示] 无法自动提权（可能被系统策略/安全软件限制）。
echo 如需管理员权限，请右键此脚本选择“以管理员身份运行”。
echo.
goto :after_elevate


:after_elevate
rem 管理员实例带第2参数FLAG：删掉它通知普通实例“我确实起来了”
if not "%~2"=="" (
  del /f /q "%~2" >nul 2>&1
)

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

title Clash.Meta 一键启动

echo 是否执行IP更新？IP更新从云端更新IP配置以解决封锁问题！
echo 按 7 跳过；按 1~6 选择对应 ip 更新。若更新后都用不了，请发邮件到 rebeccalane27@gmail.com 反馈！
echo.

choice /C 1234567 /T 17 /D 7 /M "1、ip1更新  2、ip2更新  3、ip3更新  4、ip4更新  5、ip5更新  6、ip6更新  7、跳过"
if errorlevel 7 goto startfq
if errorlevel 6 goto ip6
if errorlevel 5 goto ip5
if errorlevel 4 goto ip4
if errorlevel 3 goto ip3
if errorlevel 2 goto ip2
if errorlevel 1 goto ip1

:ip6
start /wait "" "%~dp0clash.meta\ip_Update\ip_6.bat"
goto startfq
:ip5
start /wait "" "%~dp0clash.meta\ip_Update\ip_5.bat"
goto startfq
:ip4
start /wait "" "%~dp0clash.meta\ip_Update\ip_4.bat"
goto startfq
:ip3
start /wait "" "%~dp0clash.meta\ip_Update\ip_3.bat"
goto startfq
:ip2
start /wait "" "%~dp0clash.meta\ip_Update\ip_2.bat"
goto startfq
:ip1
start /wait "" "%~dp0clash.meta\ip_Update\ip_1.bat"
goto startfq

:startfq
echo 等待 Clash.Meta 启动，请稍候...

rem 重复启动保护
tasklist /FI "IMAGENAME eq clash.meta-windows-386.exe" 2>nul | find /I "clash.meta-windows-386.exe" >nul
if not errorlevel 1 (
  echo Clash.Meta 已在运行，跳过重复启动。
) else (
  start "" /D "%~dp0clash.meta" "%~dp0clash.meta\clash.meta-windows-386.exe" -d "%~dp0clash.meta"
)

if exist "%~dp0Supermium\App\chrome.exe" (
  start "" /D "%~dp0Supermium\App" "%~dp0Supermium\App\chrome.exe" --proxy-server=127.0.0.1:7890
)

echo.
echo 完成。按空格或回车键退出。
pause
exit /b


:TryElevateWithVBS
set "FLAGFILE=%~1"
where wscript.exe >nul 2>&1 || goto :eof
set "VBSTMP=%temp%\clashmeta_elev_%random%%random%.vbs"

rem 用 Chr(34) 组装引号，长路径/中文/括号都稳
> "%VBSTMP%"  echo Set UAC = CreateObject("Shell.Application")
>>"%VBSTMP%" echo cmd = "%ComSpec%"
>>"%VBSTMP%" echo args = "/c " ^& Chr(34) ^& Chr(34) ^& "%~f0" ^& Chr(34) ^& " ELEVATED " ^& Chr(34) ^& "%FLAGFILE%" ^& Chr(34) ^& Chr(34)
>>"%VBSTMP%" echo UAC.ShellExecute cmd, args, "%~dp0", "runas", 1

wscript.exe "%VBSTMP%" >nul 2>&1
del /f /q "%VBSTMP%" >nul 2>&1
goto :eof


:TryElevateWithPS
set "FLAGFILE=%~1"
where powershell >nul 2>&1 || goto :eof
powershell -NoProfile -ExecutionPolicy Bypass -Command ^
 "try{Start-Process -FilePath $env:ComSpec -ArgumentList '/c','\"\"%~f0\"\"','ELEVATED','\"\"%FLAGFILE%\"\"' -Verb RunAs | Out-Null}catch{}" ^
 >nul 2>&1
goto :eof


:WaitFlagGone
set "FLAGFILE=%~1"
set /a i=0
:wg_loop
if not exist "%FLAGFILE%" exit /b 0
set /a i+=1
if !i! GEQ 5 exit /b 1
ping 127.0.0.1 -n 1 -w 50 >nul
goto wg_loop
