find_package(Python 3.9 REQUIRED
  COMPONENTS Interpreter Development.Module
  OPTIONAL_COMPONENTS Development.SABIModule)

find_package(nanobind CONFIG REQUIRED PATHS ${CMAKE_PREFIX_PATH} NO_DEFAULT_PATH)
message(STATUS "Found nanobind: ${nanobind_DIR} (found version ${nanobind_VERSION})")

yggdrasil_python_package_init(PYTYR pytyr)

nanobind_add_module(_pytyr NB_SHARED
    module.cpp
    pytyr/module.cpp
    pytyr/formalism/module.cpp
    pytyr/formalism/planning.cpp
    pytyr/formalism/planning/datas.cpp
    pytyr/formalism/planning/domains.cpp
    pytyr/formalism/planning/indices.cpp
    pytyr/formalism/planning/invariants.cpp
    pytyr/formalism/planning/mutable.cpp
    pytyr/formalism/planning/views.cpp
    pytyr/planning/module.cpp
    pytyr/planning/ground/module.cpp
    pytyr/planning/lifted/module.cpp
    pytyr/planning/ground/astar_eager/module.cpp
    pytyr/planning/ground/brfs/module.cpp
    pytyr/planning/ground/gbfs_lazy/module.cpp
    pytyr/planning/ground/iw/module.cpp
    pytyr/planning/ground/siw/module.cpp
    pytyr/planning/lifted/astar_eager/module.cpp
    pytyr/planning/lifted/brfs/module.cpp
    pytyr/planning/lifted/gbfs_lazy/module.cpp
    pytyr/planning/lifted/iw/module.cpp
    pytyr/planning/lifted/siw/module.cpp
)

target_link_libraries(_pytyr PRIVATE tyr::core TBB::tbb)
target_include_directories(_pytyr PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})

yggdrasil_python_module_rpaths(PYTYR _pytyr)

install(TARGETS _pytyr DESTINATION "pytyr" COMPONENT pytyr)

set_property(TARGET core PROPERTY INTERFACE_INCLUDE_DIRECTORIES
    "$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>")
yggdrasil_install_native_export(
    PKG_UPPER PYTYR
    PACKAGE pytyr
    CONFIG_NAME tyr
    NAMESPACE tyr::
    EXPORT_NAME pytyrTyrcoreTargets
    EXPORT_FILE tyrcoreTargets.cmake
    TARGETS core
    HEADER_DIRS "${CMAKE_SOURCE_DIR}/include/tyr"
    CONFIG_TEMPLATE "${CMAKE_SOURCE_DIR}/Config.cmake.in"
    VERSION_FILE "${CMAKE_BINARY_DIR}/tyrConfigVersion.cmake"
    CMAKE_SOURCE_DIRECTORY "${CMAKE_SOURCE_DIR}/cmake")

yggdrasil_install_runtime_path_fixup(PYTYR pytyr)

yggdrasil_install_python_files(pytyr "${CMAKE_CURRENT_SOURCE_DIR}"
    FILES
    pytyr/__init__.py
    pytyr/__main__.py
    pytyr/__init__.pyi
    pytyr/formalism/__init__.py
    pytyr/formalism/planning/__init__.py
    pytyr/planning/__init__.py
    pytyr/planning/ground/__init__.py
    pytyr/planning/ground/astar_eager/__init__.py
    pytyr/planning/ground/brfs/__init__.py
    pytyr/planning/ground/gbfs_lazy/__init__.py
    pytyr/planning/ground/iw/__init__.py
    pytyr/planning/ground/siw/__init__.py
    pytyr/planning/lifted/__init__.py
    pytyr/planning/lifted/astar_eager/__init__.py
    pytyr/planning/lifted/brfs/__init__.py
    pytyr/planning/lifted/gbfs_lazy/__init__.py
    pytyr/planning/lifted/iw/__init__.py
    pytyr/planning/lifted/siw/__init__.py)

yggdrasil_install_provider_env(PYTYR pytyr
    PREFIXES "${PYPDDL_NATIVE_PREFIX}" "${YGGDRASIL_NATIVE_PREFIX}")

yggdrasil_install_python_stubs(PYTYR pytyr
    MODULE pytyr._pytyr
    PRIVATE_MODULE _pytyr
    RENAME_PACKAGES pytyr pypddl pyyggdrasil)

add_custom_target(pytyr_wheel DEPENDS _pytyr)
