cmake_minimum_required(VERSION 3.15)

project(
    converter_benchmark
    VERSION 1.0.0
    LANGUAGES CXX
)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Find required packages
find_package(COLA REQUIRED)
# find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
find_package(pybind11 CONFIG REQUIRED)

find_package(COLA-Py REQUIRED)

# Benchmark executable
add_executable(converter_benchmark main.cpp)

# Link libraries
if (TARGET COLA-Py::COLA-Py)
    target_link_libraries(converter_benchmark PUBLIC COLA COLA-Py::COLA-Py pybind11::embed)
elseif (TARGET COLA-Py)
    target_link_libraries(converter_benchmark PUBLIC COLA COLA-Py pybind11::embed)
elseif (COLA_PY_SOURCE_DIR)
    # Fallback: link manually when using source directory
    target_link_libraries(converter_benchmark PUBLIC COLA pybind11::embed)
    target_include_directories(converter_benchmark PRIVATE ${COLA_PY_SOURCE_DIR})
    # Try to find the library in common locations
    find_library(
        COLA_PY_LIB
        NAMES COLA-Py libCOLA-Py
        PATHS ${COLA_DIR}/lib/COLA-Py ${CMAKE_SOURCE_DIR}/build/src ${CMAKE_BINARY_DIR}/src
        NO_DEFAULT_PATH
    )
    if (COLA_PY_LIB)
        target_link_libraries(converter_benchmark PRIVATE ${COLA_PY_LIB})
        message(STATUS "Found COLA-Py library: ${COLA_PY_LIB}")
    else ()
        message(WARNING "COLA-Py library not found. Benchmark may not link correctly.")
    endif ()
else ()
    message(FATAL_ERROR "COLA-Py not found and source directory not available.")
endif ()

# Add include directories
target_include_directories(converter_benchmark PRIVATE ${CMAKE_SOURCE_DIR}/src)

# Set Python path so the benchmark can find test_converter.py
# Get Python site-packages or the source directory
get_filename_component(PYTHON_SITE_PACKAGES "${Python3_SITELIB}" REALPATH)
if (NOT PYTHON_SITE_PACKAGES)
    # Fallback: use the benchmark directory
    set(PYTHON_SITE_PACKAGES "${CMAKE_CURRENT_SOURCE_DIR}")
endif ()

# Add compile definitions for paths
# Convert paths to strings that can be used in C++ code
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" BENCHMARK_PATH_CMAKE)
file(TO_CMAKE_PATH "${CMAKE_SOURCE_DIR}" SOURCE_PATH_CMAKE)
file(COPY "test_converter.py" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")

target_compile_definitions(
    converter_benchmark PRIVATE "BENCHMARK_PYTHON_PATH=\"${BENCHMARK_PATH_CMAKE}\""
                                "CMAKE_SOURCE_DIR=\"${SOURCE_PATH_CMAKE}\""
)

# Compiler options
# target_compile_options(
#     converter_benchmark
#     PRIVATE
#     -Wall
#     -Wextra
#     -Wpedantic
# )
