cmake_minimum_required(VERSION 3.15)
project(cich_prompt_python)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Find Python and pybind11 (Development.Module instead of Development for manylinux compatibility)
find_package(Python REQUIRED COMPONENTS Interpreter Development.Module)
set(PYBIND11_FINDPYTHON ON)
find_package(pybind11 CONFIG REQUIRED)

# Use current directory (source files are symlinked here)
set(PROJECT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}")

# Build the C++ libraries
add_library(cich_system_py
    ${PROJECT_ROOT}/src/system/platform.cpp
    ${PROJECT_ROOT}/src/system/clipboard.cpp
)
target_include_directories(cich_system_py PUBLIC ${PROJECT_ROOT}/include)
set_target_properties(cich_system_py PROPERTIES POSITION_INDEPENDENT_CODE ON)

add_library(cich_input_py
    ${PROJECT_ROOT}/src/input/multiline_input.cpp
)
target_include_directories(cich_input_py PUBLIC ${PROJECT_ROOT}/include)
target_link_libraries(cich_input_py PUBLIC cich_system_py)
set_target_properties(cich_input_py PROPERTIES POSITION_INDEPENDENT_CODE ON)

# Create the Python module
pybind11_add_module(_cich_prompt bindings.cpp)

# Link against the libraries
target_link_libraries(_cich_prompt PRIVATE
    cich_input_py
    cich_system_py
)

# Include directories
target_include_directories(_cich_prompt PRIVATE
    ${PROJECT_ROOT}/include
)

# Set output name
set_target_properties(_cich_prompt PROPERTIES
    OUTPUT_NAME "_cich_prompt"
    PREFIX "${PYTHON_MODULE_PREFIX}"
    SUFFIX "${PYTHON_MODULE_EXTENSION}"
)

# Install the module into the package so scikit-build-core can build wheels
install(TARGETS _cich_prompt
    LIBRARY DESTINATION cich_prompt
    RUNTIME DESTINATION cich_prompt
    ARCHIVE DESTINATION cich_prompt
)
