@echo off
chcp 65001 >nul 2>&1
setlocal enabledelayedexpansion

echo.
echo  ==========================================
echo    Claude Code + MiMo 离线安装包
echo    https://hu-rm.com
echo  ==========================================
echo.
echo  本脚本将自动解压并安装：
echo    - Node.js v22.22.3 (已内置)
echo    - Claude Code (已内置)
echo    - 小米 MiMo V2.5 Pro 模型配置
echo.
echo  无需网络，约 1 分钟完成。
echo.
pause

:: ---- 路径 ----
set "SCRIPT_DIR=%~dp0"
set "PROGRAMS=%LOCALAPPDATA%\Programs"
set "NODE_VER=v22.22.3"
set "NODE_DIR=%PROGRAMS%\node-%NODE_VER%-win-x64"
set "NPM_PREFIX=%USERPROFILE%\.npm-global"
set "BIN_DIR=%USERPROFILE%\bin"
set "CLAUDE_DIR=%USERPROFILE%\.claude"
set "POWERSHELL=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"
set "SEVENZIP=%ProgramFiles%\7-Zip\7z.exe"

:: ========================================
:: 检查 7-Zip
:: ========================================
if not exist "%SEVENZIP%" (
    echo  [错误] 需要 7-Zip 来解压安装包。
    echo  请先安装 7-Zip: https://7-zip.org
    echo  或者下载 zip 版本的安装包。
    pause
    exit /b 1
)

:: ========================================
:: Step 1: 解压 Node.js
:: ========================================
echo.
echo  [1/5] 解压 Node.js %NODE_VER%...

if exist "%NODE_DIR%\node.exe" (
    echo    已存在，跳过。
    goto :node_done
)

if not exist "%SCRIPT_DIR%node-%NODE_VER%-win-x64.7z" (
    echo  [错误] 找不到 node-%NODE_VER%-win-x64.7z
    pause
    exit /b 1
)

mkdir "%PROGRAMS%" 2>nul
"%SEVENZIP%" x -y -o"%PROGRAMS%" "%SCRIPT_DIR%node-%NODE_VER%-win-x64.7z" >nul
if not exist "%NODE_DIR%\node.exe" (
    echo  [错误] Node.js 解压失败。
    pause
    exit /b 1
)

:node_done
for /f "delims=" %%v in ('"%NODE_DIR%\node.exe" --version 2^>nul') do echo    Node.js %%v

:: ========================================
:: Step 2: 解压 Claude Code
:: ========================================
echo.
echo  [2/5] 解压 Claude Code...

if exist "%NPM_PREFIX%\node_modules\@anthropic-ai\claude-code\bin\claude.exe" (
    echo    已存在，跳过。
    goto :claude_done
)

if not exist "%SCRIPT_DIR%npm-global.7z" (
    echo  [错误] 找不到 npm-global.7z
    pause
    exit /b 1
)

mkdir "%NPM_PREFIX%" 2>nul
"%SEVENZIP%" x -y -o"%USERPROFILE%" "%SCRIPT_DIR%npm-global.7z" >nul

:claude_done
if exist "%NPM_PREFIX%\claude.cmd" (
    for /f "delims=" %%v in ('"%NPM_PREFIX%\claude.cmd" --version 2^>nul') do echo    Claude Code %%v
) else (
    echo  [错误] Claude Code 解压失败。
    pause
    exit /b 1
)

:: ========================================
:: Step 3: 配置 PATH
:: ========================================
echo.
echo  [3/5] 配置 PATH...

call :AddPath "%NODE_DIR%"
call :AddPath "%NPM_PREFIX%"
call :AddPath "%BIN_DIR%"

:: 通知系统 PATH 变更
"%POWERSHELL%" -NoProfile -ExecutionPolicy Bypass -Command ^
  "Add-Type -Name N -Namespace W -MemberDefinition '[DllImport(\"user32.dll\")] public static extern IntPtr SendMessageTimeout(IntPtr h,uint m,IntPtr w,string l,uint f,uint t,ref IntPtr r);'; $r=[IntPtr]::Zero; [W.N]::SendMessageTimeout([IntPtr]0xffff,0x1A,[IntPtr]0,'Environment',2,5000,[ref]$r)|Out-Null" 2>nul

echo    完成。

:: ========================================
:: Step 4: 配置 MiMo
:: ========================================
echo.
echo  [4/5] 配置小米 MiMo 模型...

mkdir "%CLAUDE_DIR%" 2>nul
mkdir "%BIN_DIR%" 2>nul

:: 配置 npm prefix
set "PATH=%NODE_DIR%;%NPM_PREFIX%;%BIN_DIR%;%PATH%"
"%NODE_DIR%\npm.cmd" config set prefix "%NPM_PREFIX%" >nul 2>&1

:: 解压 .claude 配置
if exist "%SCRIPT_DIR%claude-config.7z" (
    "%SEVENZIP%" x -y -o"%USERPROFILE%" "%SCRIPT_DIR%claude-config.7z" >nul
)

:: 生成 claude-mimo.cmd
(
echo @echo off
echo set "ANTHROPIC_AUTH_TOKEN=tp-c6cl3gyj2uo5he23w6pny0klnzwrh9k2o80sw4qpn1juyf3q"
echo set "ANTHROPIC_BASE_URL=https://token-plan-cn.xiaomimimo.com/anthropic"
echo set "ANTHROPIC_MODEL=mimo-v2.5-pro"
echo set "ANTHROPIC_REASONING_MODEL=mimo-v2.5-pro"
echo set "ANTHROPIC_DEFAULT_OPUS_MODEL=mimo-v2.5-pro"
echo set "ANTHROPIC_DEFAULT_SONNET_MODEL=mimo-v2.5-pro"
echo set "ANTHROPIC_DEFAULT_HAIKU_MODEL=mimo-v2.5-pro"
echo set "ANTHROPIC_SMALL_FAST_MODEL=mimo-v2.5-pro"
echo "%NPM_PREFIX%\claude.cmd" %%*
) > "%BIN_DIR%\claude-mimo.cmd"

echo    完成。

:: ========================================
:: Step 5: 验证
:: ========================================
echo.
echo  [5/5] 验证安装...

set "ANTHROPIC_AUTH_TOKEN=tp-c6cl3gyj2uo5he23w6pny0klnzwrh9k2o80sw4qpn1juyf3q"
set "ANTHROPIC_BASE_URL=https://token-plan-cn.xiaomimimo.com/anthropic"
set "ANTHROPIC_MODEL=mimo-v2.5-pro"

echo    测试 Claude Code 连接...
"%NPM_PREFIX%\claude.cmd" -p "Reply OK only" --dangerously-skip-permissions 2>nul
echo.

:: ========================================
:: 完成
:: ========================================
echo.
echo  ==========================================
echo    安装完成！
echo  ==========================================
echo.
echo  使用方法：
echo    1. 关闭此窗口
echo    2. 打开 新的 CMD 或 PowerShell
echo    3. 输入: claude-mimo
echo    4. 或输入: claude
echo.
echo  如果提示"找不到命令"，请注销 Windows 后重新登录。
echo.
pause
exit /b 0

:: ========================================
:: 子程序: 添加 PATH
:: ========================================
:AddPath
set "NEW_ENTRY=%~1"
for /f "tokens=2*" %%a in ('reg query "HKCU\Environment" /v Path 2^>nul') do set "CURRENT_PATH=%%b"
echo "%CURRENT_PATH%" | find /i "%NEW_ENTRY%" >nul
if errorlevel 1 (
    if "%CURRENT_PATH%"=="" (
        reg add "HKCU\Environment" /v Path /t REG_EXPAND_SZ /d "%NEW_ENTRY%" /f >nul 2>&1
    ) else (
        reg add "HKCU\Environment" /v Path /t REG_EXPAND_SZ /d "%CURRENT_PATH%;%NEW_ENTRY%" /f >nul 2>&1
    )
    set "PATH=%NEW_ENTRY%;%PATH%"
)
goto :eof
