# Database service - smartbotic-db binary and storage library

# Storage engine library
add_library(smartbotic_database STATIC
    src/document.cpp
    src/collection.cpp
    src/collection_meta.cpp
    src/snapshot.cpp
    src/database.cpp
)

target_include_directories(smartbotic_database
    PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:include>
)

target_compile_options(smartbotic_database PRIVATE ${SMARTBOTIC_CXX_WARNINGS})

target_link_libraries(smartbotic_database
    PUBLIC
        smartbotic::common
        spdlog::spdlog
        nlohmann_json::nlohmann_json
)

add_library(smartbotic::database ALIAS smartbotic_database)

# gRPC service library
add_library(smartbotic_database_grpc STATIC
    src/grpc/proto_convert.cpp
    src/grpc/document_service.cpp
    src/grpc/collection_service.cpp
    src/grpc/query_service.cpp
    src/grpc/admin_service.cpp
    src/grpc/subscription_service.cpp
    src/grpc/server.cpp
)

target_include_directories(smartbotic_database_grpc
    PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
        $<INSTALL_INTERFACE:include>
)

# Use relaxed warnings for gRPC targets (abseil uses __int128 which triggers -Wpedantic)
set(SMARTBOTIC_GRPC_WARNINGS
    -Wall
    -Wextra
    -Werror
    -Wno-unused-parameter
    -Wno-dangling-reference
    -Wno-pedantic      # Required for abseil __int128 support
    -Wno-overflow      # Required for abseil hash_set.h
)
target_compile_options(smartbotic_database_grpc PRIVATE ${SMARTBOTIC_GRPC_WARNINGS})

target_link_libraries(smartbotic_database_grpc
    PUBLIC
        smartbotic::database
        smartbotic::proto
        spdlog::spdlog
)

add_library(smartbotic::database_grpc ALIAS smartbotic_database_grpc)

# Database service executable
add_executable(smartbotic-db
    src/main.cpp
)

target_include_directories(smartbotic-db
    PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/include
)

target_compile_options(smartbotic-db PRIVATE ${SMARTBOTIC_GRPC_WARNINGS})

target_link_libraries(smartbotic-db
    PRIVATE
        smartbotic::database_grpc
        sodium
)
