cmake_minimum_required(VERSION 3.10...3.27)
project(
    sage-anns
    VERSION 0.2.0
    LANGUAGES CXX C  # Only C and C++, no CUDA
)

# ============================================================================
# Global Build Settings
# ============================================================================
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 11)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# Compilation flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")

# ============================================================================
# Find Dependencies
# ============================================================================
find_package(Python REQUIRED COMPONENTS Interpreter Development.Module)

message(STATUS "")
message(STATUS "=== SAGE ANNS Build Configuration ===")
message(STATUS "Python: ${Python_VERSION}")
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
message(STATUS "======================================")
message(STATUS "")

# ============================================================================
# Add subdirectories for algorithm implementations
# ============================================================================

# Build all C++ algorithm implementations
add_subdirectory(implementations)

# ============================================================================
# Python Bindings
# ============================================================================
# Main Python bindings are built in implementations/

# ============================================================================
# Installation
# ============================================================================
if(NOT SKBUILD_STATE STREQUAL "editable")
    # Install Python source files
    install(
        DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/python/sage_anns/"
        DESTINATION "sage_anns"
        COMPONENT python
        FILES_MATCHING
        PATTERN "*.py"
        PATTERN "*.pyi"
        PATTERN "py.typed"
        PATTERN "algorithms/candy" EXCLUDE
        PATTERN "legacy" EXCLUDE
        PATTERN "__pycache__" EXCLUDE
        PATTERN "*.pyc" EXCLUDE
        PATTERN "tests" EXCLUDE
    )
    # Note: .so files are installed by implementations/CMakeLists.txt
endif()

# ============================================================================
# Build Summary
# ============================================================================
message(STATUS "")
message(STATUS "SAGE ANNS Build Summary")
message(STATUS "=========================================")
message(STATUS "Project: ${PROJECT_NAME} v${PROJECT_VERSION}")
message(STATUS "Python: ${Python_VERSION}")
message(STATUS "C++ Standard: C++${CMAKE_CXX_STANDARD}")
message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
message(STATUS "=========================================")
message(STATUS "")
