set(HEADERS "")

set(SOURCES
    module.cpp
    core_bindings.cpp
    math_bindings.cpp
    math_filters_bindings.cpp
)

# Use pybind11 to add the python module
pybind11_add_module(uLib_python module.cpp core_bindings.cpp math_bindings.cpp math_filters_bindings.cpp)

# Link against our C++ libraries
target_link_libraries(uLib_python PRIVATE
    ${PACKAGE_LIBPREFIX}Core
    ${PACKAGE_LIBPREFIX}Math
)

# Include directories from Core and Math are automatically handled if target_include_directories were set appropriately,
# but we might need to manually include them if they aren't INTERFACE includes.
target_include_directories(uLib_python PRIVATE
    ${PROJECT_SOURCE_DIR}/src
    ${PROJECT_BINARY_DIR}
)

# Install uLib_python within the uLib install target
install(TARGETS uLib_python
        EXPORT "uLibTargets"
        RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
        LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib
        ARCHIVE DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib
)

# --- Python Tests ---------------------------------------------------------- #

if(BUILD_TESTING)
    find_package(Python3 COMPONENTS Interpreter REQUIRED)

    add_test(NAME pybind_general
             COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/testing/pybind_test.py)
    set_tests_properties(pybind_general PROPERTIES 
                         ENVIRONMENT "PYTHONPATH=$<TARGET_FILE_DIR:uLib_python>:${PROJECT_SOURCE_DIR}/src/Python")

    add_test(NAME pybind_core 
             COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/testing/core_pybind_test.py)
    set_tests_properties(pybind_core PROPERTIES 
                         ENVIRONMENT "PYTHONPATH=$<TARGET_FILE_DIR:uLib_python>:${PROJECT_SOURCE_DIR}/src/Python")

    add_test(NAME pybind_math 
             COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/testing/math_pybind_test.py)
    set_tests_properties(pybind_math PROPERTIES 
                         ENVIRONMENT "PYTHONPATH=$<TARGET_FILE_DIR:uLib_python>:${PROJECT_SOURCE_DIR}/src/Python")

    add_test(NAME pybind_math_filters 
             COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/testing/math_filters_test.py)
    set_tests_properties(pybind_math_filters PROPERTIES 
                         ENVIRONMENT "PYTHONPATH=$<TARGET_FILE_DIR:uLib_python>:${PROJECT_SOURCE_DIR}/src/Python")
endif()
