@echo off
setlocal EnableExtensions EnableDelayedExpansion
chcp 65001 >nul 2>&1
title Mike IA Local - Instalador Minike
color 0B

set "CORE_URL=https://minike.com.br/local-ai/mike-local-ai-minike.ps1"
set "HELP_URL=https://minike.com.br/local-ai/"
set "CORE_FILE=%TEMP%\mike-local-ai-minike.ps1"
set "VALIDATE_ONLY=0"
if /I "%~1"=="--validate" set "VALIDATE_ONLY=1"

call :banner
call :stage 5 "Verificando o Windows e os recursos basicos"

where powershell.exe >nul 2>&1
if errorlevel 1 (
  call :action "PowerShell nao foi encontrado neste Windows." "Instale o Windows Management Framework 5.1 ou atualize o Windows."
  exit /b 10
)

for /f "tokens=1,2,3" %%A in ('powershell.exe -NoProfile -Command "$v=[Environment]::OSVersion.Version; Write-Output ($v.Major.ToString()+' '+$v.Minor.ToString()+' '+$v.Build.ToString())"') do (
  set "WIN_MAJOR=%%A"
  set "WIN_MINOR=%%B"
  set "WIN_BUILD=%%C"
)
for /f %%A in ('powershell.exe -NoProfile -Command "$PSVersionTable.PSVersion.Major"') do set "PS_MAJOR=%%A"

if not defined WIN_MAJOR (
  call :action "Nao foi possivel identificar a versao do Windows." "Abra o suporte Minike para verificacao manual."
  start "" "%HELP_URL%"
  exit /b 11
)

echo.
echo   Windows detectado: %WIN_MAJOR%.%WIN_MINOR% build %WIN_BUILD%
echo   PowerShell detectado: %PS_MAJOR%
echo.

if "%VALIDATE_ONLY%"=="1" (
  call :stage 100 "Validacao do CMD concluida"
  echo   Nenhuma instalacao ou download foi executado.
  exit /b 0
)

if %PS_MAJOR% LSS 5 (
  call :action "PowerShell antigo detectado." "A Mike precisa do PowerShell 5.1. Atualize o Windows Management Framework."
  start "" "https://learn.microsoft.com/powershell/scripting/windows-powershell/wmf/setup/install-configure"
  exit /b 12
)

set "LEGACY=0"
if %WIN_MAJOR% LSS 10 set "LEGACY=1"
if %WIN_MAJOR% EQU 10 if %WIN_BUILD% LSS 19045 set "LEGACY=1"

if "%LEGACY%"=="1" (
  call :stage 15 "Modo de compatibilidade para Windows antigo"
  echo.
  echo   O Ollama oficial exige Windows 10 22H2 ou mais novo.
  echo   Windows 7 e 8 nao recebem instalacao automatica do motor moderno.
  echo.
  where ollama.exe >nul 2>&1
  if errorlevel 1 (
    call :action "Motor local compativel nao encontrado." "Atualize para Windows 10 22H2/11. Enquanto isso, use o modo online Minike."
    start "" "%HELP_URL%"
    pause
    exit /b 20
  )
  echo   Um Ollama existente foi encontrado. A Mike tentara reutiliza-lo sem instalar dependencias.
  set "CORE_ARGS=-SkipDependencies"
) else (
  set "CORE_ARGS="
)

call :stage 25 "Baixando o nucleo seguro da Mike"
del /q "%CORE_FILE%" >nul 2>&1
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^
  "[Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12; (New-Object Net.WebClient).DownloadFile('%CORE_URL%','%CORE_FILE%')" >nul 2>&1

if not exist "%CORE_FILE%" (
  where certutil.exe >nul 2>&1
  if not errorlevel 1 certutil.exe -urlcache -split -f "%CORE_URL%" "%CORE_FILE%" >nul 2>&1
)

if not exist "%CORE_FILE%" (
  call :action "Falha ao baixar os arquivos da Mike." "Confira a internet, antivirus ou proxy e tente novamente."
  start "" "%HELP_URL%"
  pause
  exit /b 30
)

call :stage 35 "Iniciando instalacao visivel"
echo   A proxima tela mostra cada etapa, percentual, modelo escolhido e qualquer acao necessaria.
echo.

powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%CORE_FILE%" %CORE_ARGS%
set "RESULT=%ERRORLEVEL%"

if not "%RESULT%"=="0" (
  color 0C
  call :action "A instalacao parou com o codigo %RESULT%." "Leia a mensagem acima. O log fica em %%LOCALAPPDATA%%\MINIKE-Local-AI\install.log."
  start "" "%HELP_URL%"
  pause
  exit /b %RESULT%
)

color 0A
call :stage 100 "Mike IA Local instalada"
echo.
echo   A interface local foi aberta no navegador.
echo   Atalho: Mike IA Local - Minike
echo   Suporte e instalador: %HELP_URL%
echo.
pause
exit /b 0

:banner
cls
echo ================================================================
echo                    MIKE IA LOCAL - MINIKE
echo ================================================================
echo   Verificador e instalador para Windows 7, 8, 10 e 11
echo   O sistema detecta compatibilidade antes de alterar o computador.
echo ================================================================
echo.
exit /b 0

:stage
echo [%~1%%] %~2
exit /b 0

:action
color 0E
echo.
echo ================================================================
echo   ACAO NECESSARIA
echo ================================================================
echo   %~1
echo   %~2
echo ================================================================
echo.
exit /b 0
