cmake_minimum_required(VERSION 3.16)
project(threat_fusion LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ── 选项 ──
option(USE_ROS     "启用 ROS 节点模式 (需要 roscpp)" OFF)
option(USE_SPIRECV "启用 SpireCV 吊舱控制 (需要 SpireCV 库)" OFF)

# ── 依赖 ──
find_package(OpenCV REQUIRED COMPONENTS core imgproc imgcodecs highgui)

# 热成像检测库路径 (引用 热成像识别/cpp 中的头文件和源码)
set(THERMAL_DETECTOR_DIR "${CMAKE_SOURCE_DIR}/../../热成像识别/cpp")

# 源文件
set(FUSION_SOURCES
    src/fusion_engine.cpp
    src/avoidance_controller.cpp
    src/gimbal_controller.cpp
    src/main.cpp
    # 直接编译热成像检测模块 (替代 Python 的 subprocess 调用)
    ${THERMAL_DETECTOR_DIR}/src/thermal_preprocessor.cpp
    ${THERMAL_DETECTOR_DIR}/src/thermal_detector.cpp
)

# ── ROS 模式 ──
if(USE_ROS)
    find_package(catkin REQUIRED COMPONENTS
        roscpp std_msgs geometry_msgs sensor_msgs cv_bridge
        diagnostic_msgs
        prometheus_msgs
    )
    add_definitions(-DUSE_ROS)
    include_directories(${catkin_INCLUDE_DIRS})
endif()

# ── SpireCV 模式 ──
if(USE_SPIRECV)
    add_definitions(-DUSE_SPIRECV)
    # SpireCV 头文件路径 (根据实际安装调整)
    find_package(SpireCV QUIET)
    if(NOT SpireCV_FOUND)
        message(WARNING "SpireCV 未找到, 请设置 SpireCV_DIR 或手动指定包含路径")
    endif()
endif()

add_executable(threat_fusion ${FUSION_SOURCES})

target_include_directories(threat_fusion PRIVATE
    ${CMAKE_SOURCE_DIR}/include
    ${THERMAL_DETECTOR_DIR}/include
    ${OpenCV_INCLUDE_DIRS}
)

target_link_libraries(threat_fusion PRIVATE
    ${OpenCV_LIBS}
)

if(USE_ROS)
    target_link_libraries(threat_fusion PRIVATE ${catkin_LIBRARIES})
endif()

if(USE_SPIRECV AND SpireCV_FOUND)
    target_include_directories(threat_fusion PRIVATE ${SpireCV_INCLUDE_DIRS})
    target_link_libraries(threat_fusion PRIVATE ${SpireCV_LIBRARIES})
endif()

target_compile_options(threat_fusion PRIVATE /utf-8 /EHsc)

# Windows: 输出到项目根目录
set_target_properties(threat_fusion PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}"
    RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_SOURCE_DIR}"
    RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_SOURCE_DIR}"
)
