# cmake-lint: disable=C0103

if(OGS_USE_PYTHON)
    set(_python_version_max "...<3.12")
endif()

if(OGS_USE_PIP)
    set(_python_version_max "...<3.11") # There are no VTK wheels for >3.10
    set(Python_ROOT_DIR ${PROJECT_BINARY_DIR}/.venv)
    set(CMAKE_REQUIRE_FIND_PACKAGE_Python TRUE)
    if(NOT EXISTS ${PROJECT_BINARY_DIR}/.venv)
        execute_process(
            COMMAND
                ${CMAKE_COMMAND} -DPROJECT_BINARY_DIR=${PROJECT_BINARY_DIR}
                -Dpython_version=${ogs.minimum_version.python}${_python_version_max}
                -P
                ${PROJECT_SOURCE_DIR}/scripts/cmake/PythonCreateVirtualEnv.cmake
            WORKING_DIRECTORY ${PROJECT_BINARY_DIR} COMMAND_ECHO STDOUT
                              ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE
        )
        unset(_OGS_PYTHON_PACKAGES_SHA1 CACHE)
    endif()
    set(_venv_bin_dir "bin")
    if(MSVC)
        set(_venv_bin_dir "Scripts")
    endif()
    set(LOCAL_VIRTUALENV_BIN_DIR ${PROJECT_BINARY_DIR}/.venv/${_venv_bin_dir}
        CACHE INTERNAL ""
    )
    # Fixes macOS install issues
    execute_process(
        COMMAND ${LOCAL_VIRTUALENV_BIN_DIR}/pip install wheel
        WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
    )
else()
    # Prefer unix location over frameworks (Apple-only)
    set(Python_FIND_FRAMEWORK LAST)

    # Prefer more recent Python version
    set(Python_FIND_STRATEGY VERSION)
endif()

set(_python_componets Interpreter)
if(OGS_USE_PYTHON AND NOT OGS_BUILD_WHEEL)
    list(APPEND _python_componets Development.Embed)
endif()
if(OGS_BUILD_PYTHON_MODULE OR OGS_USE_PYTHON)
    list(APPEND _python_componets Development.Module)
endif()
if(OGS_USE_PYTHON OR OGS_BUILD_PYTHON_MODULE)
    set(CMAKE_REQUIRE_FIND_PACKAGE_Python TRUE)
endif()

find_package(
    Python ${ogs.minimum_version.python}${_python_version_max}
    COMPONENTS ${_python_componets}
)

if(OGS_USE_PIP)
    set(Python_SITEARCH_NATIVE ${Python_SITEARCH})
    if(WIN32)
        string(REPLACE "\\" "\\\\" Python_SITEARCH_NATIVE
                       ${Python_SITEARCH_NATIVE}
        )
    endif()
    set(OGS_PYTHON_PACKAGES ""
        CACHE INTERNAL "List of Python packages to be installed via pip."
    )
    set(Python_ROOT_DIR ${PROJECT_BINARY_DIR}/.venv)
    if(MSVC)
        set(Python_EXECUTABLE ${Python_ROOT_DIR}/Scripts/python.exe)
    else()
        set(Python_EXECUTABLE ${Python_ROOT_DIR}/bin/python)
    endif()
    if(OGS_BUILD_TESTING)
        # Notebook requirements from versions.json
        foreach(var ${ogs.python.notebook_requirements})
            list(APPEND OGS_PYTHON_PACKAGES
                 "${ogs.python.notebook_requirements_${var}}"
            )
        endforeach()
        if("${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}" VERSION_EQUAL
           "3.10"
        )
            # Default python on arch is 3.10; there are no vtk wheels for it
            # (VTUInterface). Use wheels for vtk from pyvista.
            list(APPEND OGS_PYTHON_PACKAGES
                 "--find-links https://wheels.pyvista.org vtk"
            )
        endif()
        list(APPEND OGS_PYTHON_PACKAGES
             "snakemake==${ogs.minimum_version.snakemake}"
        )
        set(SNAKEMAKE ${LOCAL_VIRTUALENV_BIN_DIR}/snakemake CACHE FILEPATH ""
                                                                  FORCE
        )
    endif()
endif()