@echo off
chcp 65001 >nul
setlocal EnableDelayedExpansion
title DLSS5Tool 绿色包 - 一键解压配置（RTX 3080 / 30 系）

echo ============================================================
echo   DLSS5Tool v2.3.3 绿色包 - 一键解压并配置
echo   适配：RTX 30 系（含 3080 10G） / Windows 10-11 x64
echo ============================================================
echo.

cd /d "%~dp0"

rem ---------- 0. 环境自检 ----------
echo [1/5] 检查系统与显卡...
ver | findstr /i "10\.\|11\." >nul
if errorlevel 1 (
  echo   [!] 未检测到 Windows 10/11，仍会继续，但可能无法运行。
)

where nvidia-smi >nul 2>nul
if errorlevel 1 (
  echo   [!] 找不到 nvidia-smi：未装 NVIDIA 驱动，或驱动过旧。
  echo       本包需要较新的驱动（社区适配运行库对驱动版本敏感），建议先更新到最新版。
) else (
  for /f "tokens=*" %%i in ('nvidia-smi --query-gpu^=name^,driver_version --format^=csv^,noheader 2^>nul') do (
    echo   显卡/驱动: %%i
    echo %%i | findstr /i "RTX 30" >nul && echo   [OK] 检测到 RTX 30 系
    echo %%i | findstr /i "RTX 20" >nul && echo   [!] RTX 20 系不在支持范围，可能无法运行
  )
)
echo.

rem ---------- 1. 找解压工具 ----------
echo [2/5] 查找解压工具（7-Zip / WinRAR / 系统自带 tar）...
set "UNZIP="
if exist "%ProgramFiles%\7-Zip\7z.exe" set "UNZIP=%ProgramFiles%\7-Zip\7z.exe"
if exist "%ProgramFiles(x86)%\7-Zip\7z.exe" set "UNZIP=%ProgramFiles(x86)%\7-Zip\7z.exe"
if not defined UNZIP (
  for %%p in (7z.exe 7za.exe) do (
    if not defined UNZIP (
      for /f "delims=" %%q in ('where %%p 2^>nul') do if not defined UNZIP set "UNZIP=%%q"
    )
  )
)
if not defined UNZIP (
  if exist "%ProgramFiles%\WinRAR\WinRAR.exe" set "UNZIP=%ProgramFiles%\WinRAR\WinRAR.exe"
)
if defined UNZIP (echo   使用: !UNZIP!) else (echo   未找到 7-Zip/WinRAR，将尝试系统 tar（Win10 1803+ 自带）)
echo.

rem ---------- 2. 解压主程序 ----------
echo [3/5] 解压主程序（553 MB，约需 1-3 分钟）...
if exist "DLSS5Tool\DLSS5Tool.exe" (
  echo   已存在 DLSS5Tool\ ，跳过
) else (
  if defined UNZIP (
    if /i "!UNZIP:~-11!"=="WinRAR.exe" (
      "!UNZIP!" x -ibck "01-主程序\DLSS5Tool-v2.3.3-win64.zip" "DLSS5Tool\" 
    ) else (
      "!UNZIP!" x -y "01-主程序\DLSS5Tool-v2.3.3-win64.zip" -o"DLSS5Tool" >nul
    )
  ) else (
    tar -xf "01-主程序\DLSS5Tool-v2.3.3-win64.zip" -C "."
  )
  if errorlevel 1 (
    echo.
    echo   [X] 解压失败。请手动用 7-Zip 解压 01-主程序\DLSS5Tool-v2.3.3-win64.zip 到本目录，
    echo       解压后应得到 DLSS5Tool\ 文件夹（里面是 DLSS5Tool.exe 和 _internal\）。
    pause
    exit /b 1
  )
)
if not exist "DLSS5Tool\DLSS5Tool.exe" (
  echo   [X] 没找到 DLSS5Tool\DLSS5Tool.exe，解压结构可能不对。
  echo       请手动解压并确保主程序在 DLSS5Tool\ 子目录里。
  pause
  exit /b 1
)
echo   [OK] 主程序就位
echo.

rem ---------- 3. 放 30 系运行库 ----------
echo [4/5] 安装 30 系 DLSS 运行库（nvngx_dlssnr.dll）...
if not exist "DLSS5Tool\mods" mkdir "DLSS5Tool\mods"
if exist "DLSS5Tool\mods\nvngx_dlssnr.dll" (
  echo   mods\nvngx_dlssnr.dll 已存在，跳过
) else (
  set "TMPX=%TEMP%\dlss5_30"
  if exist "!TMPX!" rd /s /q "!TMPX!"
  mkdir "!TMPX!"
  if defined UNZIP (
    if /i "!UNZIP:~-11!"=="WinRAR.exe" (
      "!UNZIP!" x -ibck "02-30系运行库\30.-310.8.SF-v2.zip" "!TMPX!\"
    ) else (
      "!UNZIP!" x -y "02-30系运行库\30.-310.8.SF-v2.zip" -o"!TMPX!" >nul
    )
  ) else (
    tar -xf "02-30系运行库\30.-310.8.SF-v2.zip" -C "!TMPX!"
  )
  set "DLLSRC="
  if exist "!TMPX!\30系\nvngx_dlssnr.dll" set "DLLSRC=!TMPX!\30系\nvngx_dlssnr.dll"
  if not defined DLLSRC (
    for /r "!TMPX!" %%f in (nvngx_dlssnr.dll) do if not defined DLLSRC set "DLLSRC=%%f"
  )
  if defined DLLSRC (
    copy /y "!DLLSRC!" "DLSS5Tool\mods\nvngx_dlssnr.dll" >nul
    echo   [OK] 已放入 DLSS5Tool\mods\nvngx_dlssnr.dll
  ) else (
    echo   [X] 没在压缩包里找到 nvngx_dlssnr.dll。请手动解压 02-30系运行库\30.-310.8.SF-v2.zip，
    echo       把 30系\nvngx_dlssnr.dll 复制到 DLSS5Tool\mods\ 下。
  )
  rd /s /q "!TMPX!" 2>nul
)
echo.

rem ---------- 4. 启动 ----------
echo [5/5] 启动 DLSS5Tool...
echo.
echo ------------------------------------------------------------
echo   接下来这样做：
echo   1) 首次运行若提示缺 VC++ 运行库，装一次 vc_redist.x64.exe 即可
echo   2) 把 03-测试素材\A-DLSS测试用-VCD母盘-352x288-25fps-10秒.mp4 拖进窗口
echo   3) 超分选 2x，插帧选 2x，先小段试跑看速度
echo   4) 和 B、C 两个对照片段比一比，再决定要不要跑全片
echo ------------------------------------------------------------
echo.
cd /d "%~dp0DLSS5Tool"
start "" "DLSS5Tool.exe"
echo 已尝试启动。若窗口没出现，请手动双击 DLSS5Tool\DLSS5Tool.exe
echo.
pause
