@echo off

REM Check for Python version and use a supported version if available
SET PYTHON=python
python -c "import sys; sys.exit(0 if sys.version_info[:2] in [(3, 10), (3, 11)] else 1)" 2>nul
IF NOT ERRORLEVEL 1 (
    echo Selected Python version: %PYTHON%
    GOTO EndVersionCheck
)

SET PYTHON=python
FOR /F "tokens=*" %%i IN ('py --list') DO (
    echo %%i | findstr /C:"-V:3.11 " >nul && SET PYTHON=py -3.11 && GOTO EndPythonCheck
    echo %%i | findstr /C:"-V:3.10 " >nul && SET PYTHON=py -3.10 && GOTO EndPythonCheck
)
:EndPythonCheck
%PYTHON% -c "import sys; sys.exit(0 if sys.version_info[:2] in [(3, 10), (3, 11)] else 1)" 2>nul
IF ERRORLEVEL 1 (
    echo Unsupported Python version. Please install Python 3.10 or 3.11.
    exit /b 1
)
IF "%PYTHON%"=="python" (
    echo Default Python version is being used: %PYTHON%
) ELSE (
    echo Selected Python version: %PYTHON%
)

:EndVersionCheck

IF ERRORLEVEL 1 (
    echo Unsupported Python version. Please install Python 3.10 or 3.11.
    exit /b 1
)

REM create a virtual environment
%PYTHON% -m venv talemate_env

REM activate the virtual environment
call talemate_env\Scripts\activate

REM upgrade pip and setuptools
python -m pip install --upgrade pip setuptools


REM install poetry
python -m pip install "poetry==1.7.1" "rapidfuzz>=3" -U

REM use poetry to install dependencies
python -m poetry install

REM installing torch
echo Installiing PyTorch... 
echo Checking for CUDA availability...

REM we use nvcc to check for CUDA availability
REM if cuda exists: pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
nvcc --version >nul 2>&1

IF ERRORLEVEL 1 (
    echo CUDA not found. Keeping PyTorch installation without CUDA support...
) ELSE (
    echo CUDA found. Installing PyTorch with CUDA support...
    REM uninstalling existing torch, torchvision, torchaudio
    python -m pip uninstall torch torchaudio -y
    python -m pip install torch~=2.4.1 torchaudio~=2.4.1 --index-url https://download.pytorch.org/whl/cu121
)

REM copy config.example.yaml to config.yaml only if config.yaml doesn't exist
IF NOT EXIST config.yaml copy config.example.yaml config.yaml

REM navigate to the frontend directory
echo Installing frontend dependencies...
cd talemate_frontend
call npm install

echo Building frontend...
call npm run build

REM return to the root directory
cd ..

echo Installation completed successfully.
pause
