@echo off
REM 检查当前会话是否具有管理员权限
openfiles >nul 2>&1
if %errorlevel% neq 0 (
    REM 如果不是管理员,则重新启动脚本以管理员模式运行
    echo 请求管理员权限...
    powershell -Command "Start-Process cmd -ArgumentList '/c %~f0 %*' -Verb RunAs"
    exit /b
)

REM 设置当前工作目录
cd /d %~dp0

REM 获取当前目录路径
set currentPath=%cd%
set currentPath=%currentPath:\=/%

REM 生成JavaScript代码
set "jsCode=(async () =^>await import('file:///%currentPath%/napcat.mjs'))();"

REM 将JavaScript代码保存到文件中
echo %jsCode% > loadScript.js
echo JavaScript code has been generated and saved to loadScript.js

REM 设置NAPCAT_PATH环境变量为 当前目录的loadScript.js地址
set NAPCAT_PATH=%cd%\loadScript.js

REM 获取QQ路径


:loop_read
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\QQ" /v "UninstallString"') do (
    set RetString=%%b
    goto :napcat_boot
)

:napcat_boot
for %%a in (%RetString%) do (
    set "pathWithoutUninstall=%%~dpa"
)

SET QQPath=%pathWithoutUninstall%QQ.exe

REM 拿不到QQ路径则退出
if not exist "%QQpath%" (
    echo provided QQ path is invalid: %QQpath%
    pause
    exit /b
)

REM 收集dbghelp.dll路径和HASH信息
set QQdir=%~dp0
set oldDllPath=%QQdir%dbghelp.dll
set newDllPath=%currentPath%\dbghelp.dll

for /f "tokens=*" %%A in ('certutil -hashfile "%oldDllPath%" MD5') do (
    if not defined oldDllHash set oldDllHash=%%A
)
for /f "tokens=*" %%A in ('certutil -hashfile "%newDllPath%" MD5') do (
    if not defined newDllHash set newDllHash=%%A
)

REM 如果文件一致则跳过
if "%oldDllHash%" neq "%newDllHash%" (
    tasklist /fi "imagename eq QQ.exe" 2>nul | find /i "QQ.exe" >nul
    if %errorlevel% equ 0 (
        REM 文件占用则退出
        echo dbghelp.dll is in use, cannot continue.
    ) else (
        REM 文件未占用则尝试覆盖
        copy /y "%newDllPath%" "%oldDllPath%"
        if %errorlevel% neq 0 (
            echo Failed to copy dbghelp.dll
            pause
            exit /b
        ) else (
            echo dbghelp.dll has been copied to %QQdir%
        )
    )
)

REM 带参数启动QQ
REM 判断wt是否存在,存在则通过wt启动,不存在则通过cmd启动
REM %QQPath% --enable-logging  %*
where wt >nul 2>nul
if %errorlevel% equ 0 (
    wt "cmd" /c "%QQPath%" --enable-logging  %* 
) else (
    "%QQPath%" --enable-logging  %*
)