@echo off
setlocal EnableExtensions EnableDelayedExpansion

PUSHD "%~dp0"

set INVOKE_AI_VERSION=latest
set arg=%1
if "%arg%" neq "" (
   if "%arg:~0,2%" equ "/?" (
       echo Usage: update.bat ^<release name or branch^>
       echo Updates InvokeAI to use the indicated version of the code base.
       echo Find the version or branch for the release you want, and pass it as the argument.
       echo For example '.\update.bat v2.2.5' for release 2.2.5.
       echo             '.\update.bat main' for the latest development version
       echo.
       echo If no argument provided then will install the most recent release, equivalent to
       echo '.\update.bat latest'
       exit /b
   ) else (
       set INVOKE_AI_VERSION=%arg%
   )
)

set INVOKE_AI_SRC="https://github.com/invoke-ai/InvokeAI/archive/!INVOKE_AI_VERSION!.zip"
set INVOKE_AI_DEP=https://raw.githubusercontent.com/invoke-ai/InvokeAI/!INVOKE_AI_VERSION!/environments-and-requirements/requirements-base.txt
set INVOKE_AI_MODELS=https://raw.githubusercontent.com/invoke-ai/InvokeAI/$INVOKE_AI_VERSION/configs/INITIAL_MODELS.yaml

call curl -I "%INVOKE_AI_DEP%" -fs >.tmp.out
if %errorlevel% neq 0 (
    echo '!INVOKE_AI_VERSION!' is not a known branch name or tag. Please check the version and try again.
    echo "Press any key to continue"
    pause
    exit /b
)
del .tmp.out

echo This script will update InvokeAI and all its dependencies to !INVOKE_AI_SRC!.
echo If you do not want to do this, press control-C now!
pause

call curl -L "%INVOKE_AI_DEP%" > environments-and-requirements/requirements-base.txt
call curl -L "%INVOKE_AI_MODELS%" > configs/INITIAL_MODELS.yaml


call .venv\Scripts\activate.bat
call .venv\Scripts\python -mpip install -r requirements.txt
if %errorlevel% neq 0 (
   echo Installation of requirements failed. See https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/#troubleshooting for suggestions.
   pause
   exit /b
)

call .venv\Scripts\python -mpip install !INVOKE_AI_SRC!
if %errorlevel% neq 0 (
   echo Installation of InvokeAI failed. See https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/#troubleshooting for suggestions.
   pause
   exit /b
)

@rem call .venv\Scripts\invokeai-configure --root=.

@rem if %errorlevel% neq 0 (
@rem    echo Configuration InvokeAI failed. See https://invoke-ai.github.io/InvokeAI/installation/INSTALL_AUTOMATED/#troubleshooting for suggestions.
@rem    pause
@rem    exit /b
@rem )

echo InvokeAI has been updated to '%INVOKE_AI_VERSION%'

echo "Press any key to continue"
pause
endlocal