# Runner service - smartbotic-crm-runner binary with JavaScript templating engine

# QuickJS for JavaScript execution (using quickjs-ng maintained fork)
FetchContent_Declare(
    quickjs
    GIT_REPOSITORY https://github.com/quickjs-ng/quickjs.git
    GIT_TAG v0.11.0
)

message(STATUS "Fetching QuickJS...")
FetchContent_MakeAvailable(quickjs)

# Core runner library (config, JS engine, template parser)
add_library(smartbotic_runner STATIC
    src/config.cpp
    src/js_engine.cpp
    src/js_api.cpp
    src/template_parser.cpp
)

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

target_compile_options(smartbotic_runner PRIVATE ${SMARTBOTIC_CXX_WARNINGS})

target_link_libraries(smartbotic_runner
    PUBLIC
        smartbotic::common
        smartbotic::proto
        spdlog::spdlog
        nlohmann_json::nlohmann_json
        qjs
)

add_library(smartbotic::runner ALIAS smartbotic_runner)

# gRPC service library
add_library(smartbotic_runner_grpc STATIC
    src/grpc/server.cpp
    src/grpc/template_service.cpp
    src/grpc/script_service.cpp
    src/grpc/health_service.cpp
)

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

# Use relaxed warnings for gRPC targets
set(SMARTBOTIC_RUNNER_GRPC_WARNINGS
    -Wall
    -Wextra
    -Werror
    -Wno-unused-parameter
    -Wno-dangling-reference
    -Wno-pedantic
    -Wno-overflow
)
target_compile_options(smartbotic_runner_grpc PRIVATE ${SMARTBOTIC_RUNNER_GRPC_WARNINGS})

target_link_libraries(smartbotic_runner_grpc
    PUBLIC
        smartbotic::runner
        smartbotic::proto
        spdlog::spdlog
)

add_library(smartbotic::runner_grpc ALIAS smartbotic_runner_grpc)

# Runner service executable
add_executable(smartbotic-crm-runner
    src/main.cpp
)

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

target_compile_options(smartbotic-crm-runner PRIVATE ${SMARTBOTIC_RUNNER_GRPC_WARNINGS})

target_link_libraries(smartbotic-crm-runner
    PRIVATE
        smartbotic::runner_grpc
)
