@echo off
chcp 65001 >nul
color 0A
title onlineconfig一键配置脚本

:: ==========================================
::  1.获取管理员权限
:: ==========================================
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"

:: ==========================================
::2. 修改 hosts 文件
:: ==========================================
echo 正在检查 hosts 文件...
set HOSTS_PATH=%windir%\System32\drivers\etc\hosts
set HOSTS_ENTRY=127.0.0.1 audioms.cc.163.com

findstr /I /C:"audioms.cc.163.com" "%HOSTS_PATH%" >nul
if %ERRORLEVEL% NEQ 0 (
    echo.>> "%HOSTS_PATH%"
    echo %HOSTS_ENTRY%>> "%HOSTS_PATH%"
    echo [成功] 已将 %HOSTS_ENTRY% 添加至 hosts 文件末尾。
) else (
    echo [跳过] hosts 文件中已存在相关记录。
)

:: ==========================================
:: 3. 判断所在目录及文件夹是否存在
:: ==========================================
echo.
echo 正在检查目录环境...
for %%I in (.) do set "CURR_DIR=%%~nxI"

if /I not "%CURR_DIR%"=="Overwatch" (
    echo [错误] 当前目录不是 Overwatch！
    echo 请将此脚本放在 Overwatch 根目录下运行。
    pause
    exit /b
)

set DB_DIR=_retail_\CC\db
set TARGET_DIR=%DB_DIR%\onlineconfig

if not exist "%TARGET_DIR%\" (
    echo [跳过] 当前目录下不存在 %TARGET_DIR% 文件夹。
    pause
    exit /b
)
echo [成功] 目录校验通过。

:: ==========================================
::  4.解除文件占用 (强制结束相关进程)
:: ==========================================
echo.
echo 正在解除文件占用 (清理战网与游戏进程)...
taskkill /F /IM Overwatch.exe /T >nul 2>&1
taskkill /F /IM Agent.exe /T >nul 2>&1
taskkill /F /IM Battle.net.exe /T >nul 2>&1
:: 等待2秒确保进程完全释放句柄
timeout /t 2 /nobreak >nul

:: ==========================================
:: 5. 下载、解压与替换
:: ==========================================
set URL=http://onlineconfig.pmovo.org
set ZIP_FILE=onlineconfig_temp.zip
set EXTRACT_DIR=temp_extract_folder

echo.
echo 正在从 %URL% 下载文件...
:: 使用系统自带的 PowerShell 进行下载
powershell -Command "Invoke-WebRequest -Uri '%URL%' -OutFile '%ZIP_FILE%'"
if not exist "%ZIP_FILE%" (
    echo [错误] 下载失败，请检查网络或 URL。
    pause
    exit /b
)

echo 正在解压文件...
if exist "%EXTRACT_DIR%" rmdir /S /Q "%EXTRACT_DIR%"
:: 使用 PowerShell 进行解压
powershell -Command "Expand-Archive -Path '%ZIP_FILE%' -DestinationPath '%EXTRACT_DIR%' -Force"

echo 正在删除原有的 onlineconfig 文件夹...
rmdir /S /Q "%TARGET_DIR%"

echo 正在替换为新的 onlineconfig 文件夹...
:: 判断压缩包解压后的结构，如果压缩包自带一层 onlineconfig 文件夹则直接移动
if exist "%EXTRACT_DIR%\onlineconfig\" (
    move /Y "%EXTRACT_DIR%\onlineconfig" "%DB_DIR%\" >nul
) else (
    :: 如果压缩包内直接是文件，则新建文件夹并移动所有文件
    mkdir "%TARGET_DIR%"
    xcopy /Y /E /I "%EXTRACT_DIR%\*" "%TARGET_DIR%\" >nul
)

:: ==========================================
:: 6. 清理临时文件
:: ==========================================
echo 正在清理临时文件...
del /F /Q "%ZIP_FILE%" >nul 2>&1
rmdir /S /Q "%EXTRACT_DIR%" >nul 2>&1

echo.
echo ==========================================
echo 操作全部完成！
echo ==========================================
pause