@echo off
setlocal
title WMS Print Agent - Установка
echo ================================================
echo  WMS Print Agent - Установка
echo  Сервер: https://www.tair-ai.net
echo ================================================
echo.

set "SERVER=https://www.tair-ai.net"
set "APPDIR=%APPDATA%\WMS-PrintAgent"
set "REQ=%APPDIR%\requirements.txt"
mkdir "%APPDIR%" 2>nul

:: ── Версия Windows: 10+ или старее (7/8/8.1) ────────
set WINMAJOR=10
for /f %%v in ('powershell -NoProfile -ExecutionPolicy Bypass -Command "[Environment]::OSVersion.Version.Major"') do set WINMAJOR=%%v
set LEGACY=0
if %WINMAJOR% LSS 10 set LEGACY=1
set PYARCH=amd64
set PYSUF=
if /i not "%PROCESSOR_ARCHITECTURE%"=="AMD64" if not defined PROCESSOR_ARCHITEW6432 (set PYARCH=win32& set PYSUF=-32)
if "%LEGACY%"=="1" (
    set PYVER=3.8.10
    set PYDIR=Python38%PYSUF%
    echo Windows старше 10-й: ставим Python 3.8
) else (
    set PYVER=3.11.9
    set PYDIR=Python311%PYSUF%
)

:: ── Ищем Python 3.8+ ───────────────────────────────
set PYEXE=
for %%P in ("%LOCALAPPDATA%\Programs\Python\%PYDIR%\python.exe") do if exist %%P set "PYEXE=%%~P"
if not defined PYEXE (
    python -c "import sys;sys.exit(0 if sys.version_info>=(3,8) else 1)" >nul 2>&1
    if not errorlevel 1 for /f "delims=" %%i in ('python -c "import sys;print(sys.executable)"') do set "PYEXE=%%i"
)
if defined PYEXE goto :python_ok

echo Python не найден. Скачиваем Python %PYVER% с python.org...
set "PYSETUP=%TEMP%\python-%PYVER%-setup.exe"
if "%PYARCH%"=="amd64" (set "PYURL=https://www.python.org/ftp/python/%PYVER%/python-%PYVER%-amd64.exe") else (set "PYURL=https://www.python.org/ftp/python/%PYVER%/python-%PYVER%.exe")
powershell -NoProfile -ExecutionPolicy Bypass -Command "[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12; (New-Object Net.WebClient).DownloadFile('%PYURL%','%PYSETUP%')"
if not exist "%PYSETUP%" (
    echo [ОШИБКА] Не удалось скачать Python: %PYURL%
    echo Скачайте и установите его вручную, отметив "Add Python to PATH", затем запустите установщик снова.
    pause & exit /b 1
)
echo Устанавливаем Python %PYVER% (1-2 минуты)...
"%PYSETUP%" /quiet InstallAllUsers=0 PrependPath=1 Include_test=0
set "PYEXE=%LOCALAPPDATA%\Programs\Python\%PYDIR%\python.exe"
if not exist "%PYEXE%" (
    echo [ОШИБКА] Python не установился: нет %PYEXE%
    pause & exit /b 1
)

:python_ok
for %%D in ("%PYEXE%") do set "PYWEXE=%%~dpDpythonw.exe"
echo [OK] Python: %PYEXE%

:: ── Останавливаем прежний агент ДО установки библиотек: запущенный агент держит
:: их файлы (.pyd), и pip падает с ?Отказано в доступе? (WinError 5) ──
echo Останавливаем прежний агент, если запущен...
powershell -NoProfile -ExecutionPolicy Bypass -Command "Get-WmiObject Win32_Process | Where-Object { $_.Name -like 'python*' -and $_.CommandLine -like '*print_agent.py*' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force }" >nul 2>&1
ping -n 3 127.0.0.1 >nul

:: ── Зависимости ───────────────────────────────────
echo Устанавливаем зависимости (1-3 минуты)...
if exist "%REQ%" del "%REQ%"
if "%LEGACY%"=="1" goto :req_old
>>"%REQ%" echo fastapi==0.115.0
>>"%REQ%" echo uvicorn==0.30.6
>>"%REQ%" echo pywin32==306
>>"%REQ%" echo Pillow==10.4.0
>>"%REQ%" echo requests==2.32.3
>>"%REQ%" echo pymupdf==1.24.10
>>"%REQ%" echo pydantic==2.8.2
goto :req_done
:req_old
>>"%REQ%" echo fastapi==0.115.0
>>"%REQ%" echo uvicorn==0.30.6
>>"%REQ%" echo pywin32==306
>>"%REQ%" echo Pillow==10.4.0
>>"%REQ%" echo requests==2.32.3
>>"%REQ%" echo pymupdf==1.24.10
>>"%REQ%" echo pydantic==1.10.18
:req_done
"%PYEXE%" -m pip install -r "%REQ%" -q --no-warn-script-location --disable-pip-version-check
if errorlevel 1 (
    echo [ОШИБКА] Не удалось установить зависимости ^(текст ошибки выше^)
    pause & exit /b 1
)
"%PYEXE%" -c "import fastapi, uvicorn, requests, PIL, fitz, win32print, pydantic"
if errorlevel 1 (
    echo [ОШИБКА] Зависимости установились, но не загружаются ^(текст ошибки выше^). Пришлите скрин.
    pause & exit /b 1
)
echo [OK] Зависимости установлены

:: ── Скачиваем агент (через Python - ему не нужен curl) ──
echo Скачиваем агент с сервера...
"%PYEXE%" -c "import requests,sys; r=requests.get(sys.argv[1],timeout=60); r.raise_for_status(); open(sys.argv[2],'wb').write(r.content)" "%SERVER%/api/wms/agent/script" "%APPDIR%\print_agent.py"
if errorlevel 1 (
    echo [ОШИБКА] Не удалось скачать агент с %SERVER%
    pause & exit /b 1
)
>"%APPDIR%\server.txt" echo %SERVER%
echo [OK] Агент скачан

:: ── Автозагрузка ──────────────────────────────────
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "WMS-PrintAgent" /t REG_SZ /d "\"%PYWEXE%\" \"%APPDIR%\print_agent.py\"" /f >nul
echo [OK] Добавлено в автозагрузку Windows

:: ── Запускаем агент ──────────────────────────────
echo Запускаем агент...
start "" "%PYWEXE%" "%APPDIR%\print_agent.py"

:: ── Проверяем, что агент отвечает ─────────────────
set OK=0
set TRIES=0
:probe
set /a TRIES+=1
ping -n 3 127.0.0.1 >nul
"%PYEXE%" -c "import requests; requests.get('http://localhost:12100/status',timeout=3).raise_for_status()" >nul 2>&1
if not errorlevel 1 (set OK=1& goto :probe_done)
if %TRIES% LSS 15 goto :probe
:probe_done
if "%OK%"=="1" (
    echo.
    echo ================================================
    echo  Готово! Агент запущен на localhost:12100
    echo  Открывайте WMS - принтер найдётся автоматически
    echo ================================================
    timeout /t 6
    exit /b 0
)
echo.
echo [ОШИБКА] Агент не отвечает на localhost:12100. Последние строки журнала:
powershell -NoProfile -ExecutionPolicy Bypass -Command "if (Test-Path '%APPDIR%\wms_agent.log') { Get-Content '%APPDIR%\wms_agent.log' -Tail 20 -Encoding UTF8 }"
echo.
echo Пробный запуск в этом окне (текст ошибки будет ниже), пришлите скрин:
"%PYEXE%" "%APPDIR%\print_agent.py"
pause
