# LLM service - smartbotic-crm-llm binary and core libraries

# Core LLM library (config, providers, sessions, tools)
add_library(smartbotic_llm STATIC
    src/config.cpp
    src/provider/provider_factory.cpp
    src/provider/openai_provider.cpp
    src/provider/anthropic_provider.cpp
    src/session/session.cpp
    src/session/database_session_store.cpp
    src/tool/tool_registry.cpp
)

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

target_compile_options(smartbotic_llm PRIVATE ${SMARTBOTIC_CXX_WARNINGS})

target_link_libraries(smartbotic_llm
    PUBLIC
        smartbotic::common
        smartbotic::proto
        spdlog::spdlog
        nlohmann_json::nlohmann_json
        httplib::httplib
        OpenSSL::SSL
        OpenSSL::Crypto
)

add_library(smartbotic::llm ALIAS smartbotic_llm)

# gRPC service library
add_library(smartbotic_llm_grpc STATIC
    src/grpc/proto_convert.cpp
    src/grpc/llm_service.cpp
    src/grpc/session_service.cpp
    src/grpc/model_service.cpp
    src/grpc/config_service.cpp
    src/grpc/server.cpp
)

target_include_directories(smartbotic_llm_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_llm_grpc PRIVATE ${SMARTBOTIC_GRPC_WARNINGS})

target_link_libraries(smartbotic_llm_grpc
    PUBLIC
        smartbotic::llm
        smartbotic::proto
        spdlog::spdlog
)

add_library(smartbotic::llm_grpc ALIAS smartbotic_llm_grpc)

# LLM service executable
add_executable(smartbotic-crm-llm
    src/main.cpp
)

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

target_compile_options(smartbotic-crm-llm PRIVATE ${SMARTBOTIC_GRPC_WARNINGS})

target_link_libraries(smartbotic-crm-llm
    PRIVATE
        smartbotic::llm_grpc
)
