cmake_minimum_required(VERSION 3.16)
project(main)

# Set C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Find required packages
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)

# Try to find PahoMqttC, fallback to manual linking if not found
find_package(PahoMqttC QUIET)
if(NOT PahoMqttC_FOUND)
    message(STATUS "PahoMqttC package not found, using manual library linking")
    find_library(PAHO_MQTT_C_LIBRARY NAMES paho-mqtt3c REQUIRED)
    find_path(PAHO_MQTT_C_INCLUDE_DIR NAMES MQTTClient.h REQUIRED)
endif()

find_package(unitree_sdk2 REQUIRED)

# Include directories
include_directories(
    include
    ${CMAKE_CURRENT_SOURCE_DIR}/include
    ${CMAKE_CURRENT_SOURCE_DIR}/include/nlohmann
    $<$<NOT:$<BOOL:${PahoMqttC_FOUND}>>:${PAHO_MQTT_C_INCLUDE_DIR}>
)

# Source files
set(SOURCES
    src/main.cpp
    src/controller.cpp
    src/custom_robot.cpp
    src/config.cpp
    src/logger.cpp
    src/mqtt.cpp
    src/navigation.cpp
    src/low_controller.cpp
    src/recharge.cpp
    src/monitor.cpp
)

add_executable(main ${SOURCES})

# Link libraries
target_link_libraries(main
    PRIVATE
    unitree_sdk2
    Threads::Threads
    $<$<BOOL:${PahoMqttC_FOUND}>:PahoMqttC::PahoMqttC>
    $<$<NOT:$<BOOL:${PahoMqttC_FOUND}>>:${PAHO_MQTT_C_LIBRARY}>
)

# Set output directory
set_target_properties(main PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
)

# Install target
install(TARGETS main
    RUNTIME DESTINATION bin
)

