# Subdir CMake for src

# Ensure internal libs are available to dependents
add_subdirectory(dal)

# Add CLI
add_subdirectory(cli)
add_subdirectory(KI)
add_subdirectory(mcp)

include_directories(CMAKE_CURRENT_SOURCE_DIR)

add_library(kompanion_mw SHARED
  middleware/kompanioncontroller.cpp
  middleware/libkiexecutor.cpp
  middleware/regexregistry.cpp
  middleware/guardrailspolicy.cpp
  middleware/orchestrator.cpp
)

find_package(Qt6 REQUIRED COMPONENTS Core DBus Sql)

set(KOMPANION_CONTROLLER_DBUS_XML ${CMAKE_CURRENT_SOURCE_DIR}/../docs/dbus/org.kde.kompanion.controller.xml)
set(KOMPANION_EXECUTOR_DBUS_XML ${CMAKE_CURRENT_SOURCE_DIR}/../docs/dbus/org.kde.kompanion.executor.xml)

qt_add_dbus_adaptor(
  KOMPANION_DBUS_ADAPTOR_SRCS
  ${KOMPANION_CONTROLLER_DBUS_XML}
  ${CMAKE_CURRENT_SOURCE_DIR}/middleware/kompanioncontroller.h KompanionController
)

qt_add_dbus_interface(
  KOMPANION_DBUS_INTERFACE_SRCS
  ${KOMPANION_EXECUTOR_DBUS_XML}
  OrgKdeKompanionExecutor
)

set_target_properties(kompanion_mw PROPERTIES CXX_STANDARD 20)

target_include_directories(kompanion_mw PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/middleware)

target_sources(kompanion_mw PRIVATE ${KOMPANION_DBUS_ADAPTOR_SRCS} ${KOMPANION_DBUS_INTERFACE_SRCS})

target_link_libraries(kompanion_mw PRIVATE Qt6::Core Qt6::DBus Qt6::Sql Qt6::Network kom_dal)
target_compile_definitions(kompanion_mw PRIVATE KOMPANION_MW_LIBRARY)

# Example executable wiring GUI/controller/executor together could be added later.
