cmake_minimum_required(VERSION 3.20)
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
    "${CMAKE_CURRENT_SOURCE_DIR}/VERSION")
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" SVAPI_VERSION)
string(STRIP "${SVAPI_VERSION}" SVAPI_VERSION)
project(smartbotic-vectorapi VERSION ${SVAPI_VERSION} LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
endif()

option(BUILD_TESTS "Build tests" ON)
option(BUILD_WEBUI "Build the React web UI via npm" ON)

include(GNUInstallDirs)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(Dependencies)

find_package(smartbotic-db-client REQUIRED)
find_package(nlohmann_json REQUIRED)
find_package(spdlog REQUIRED)
find_package(OpenSSL REQUIRED)

# Optional systemd (sd_notify)
find_package(PkgConfig)
if(PkgConfig_FOUND)
    pkg_check_modules(SYSTEMD IMPORTED_TARGET libsystemd)
endif()

# git commit for version banner
execute_process(COMMAND git rev-parse --short HEAD
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
    OUTPUT_VARIABLE SVAPI_GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE
    ERROR_QUIET)
if(NOT SVAPI_GIT_COMMIT)
    set(SVAPI_GIT_COMMIT "unknown")
endif()
configure_file(${CMAKE_SOURCE_DIR}/cmake/version.hpp.in
    ${CMAKE_BINARY_DIR}/generated/svapi/version.hpp @ONLY)

add_subdirectory(src)

if(BUILD_TESTS)
    enable_testing()
    add_subdirectory(tests)
endif()

if(BUILD_WEBUI)
    include(WebUI OPTIONAL)   # provided by plan 2; absent is fine
endif()

# Install: config conffile, api docs
install(FILES ${CMAKE_SOURCE_DIR}/config/config.json
    DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/smartbotic-vectorapi)
install(FILES ${CMAKE_SOURCE_DIR}/api/openapi.json
              ${CMAKE_SOURCE_DIR}/api/llms.txt
    DESTINATION ${CMAKE_INSTALL_DATADIR}/smartbotic-vectorapi
    OPTIONAL)
