cmake_minimum_required(VERSION 3.15)
project(airport_collision_avoidance)

# 打印调试信息
message(STATUS "CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}")
message(STATUS "PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}")

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# MacOS 特定设置
if(APPLE)
    # 设置 Boost 路径（因为 MacOS 使用 Homebrew 安装在特定位置）
    set(Boost_ROOT "/opt/homebrew/Cellar/boost/1.86.0_2")
    message(STATUS "Setting Boost_ROOT: ${Boost_ROOT}")
    
    # 添加 Homebrew 安装的包含路径
    include_directories(
        /opt/homebrew/include
    )
    link_directories(
        /opt/homebrew/lib
    )
endif()

# 查找依赖包
# 设置策略以解决 Boost 警告
cmake_policy(SET CMP0167 NEW)

find_package(Boost REQUIRED COMPONENTS system)
message(STATUS "Boost_INCLUDE_DIRS: ${Boost_INCLUDE_DIRS}")
message(STATUS "Boost_LIBRARIES: ${Boost_LIBRARIES}")
message(STATUS "Boost_VERSION: ${Boost_VERSION}")

find_package(nlohmann_json REQUIRED)
find_package(Threads REQUIRED)

# 明确列出所有源文件
set(SOURCES
    src/main.cpp
    src/collector/DataCollector.cpp
    src/network/HTTPDataSource.cpp
    src/spatial/CoordinateConverter.cpp
    src/types/VehicleData.cpp
    src/utils/Logger.cpp
)

# 添加可执行文件
add_executable(${PROJECT_NAME} ${SOURCES})

# 设置包含目录
target_include_directories(${PROJECT_NAME}
    PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/src
    ${Boost_INCLUDE_DIRS}
)

# 链接依赖库
target_link_libraries(${PROJECT_NAME}
    PRIVATE
    Boost::system
    nlohmann_json::nlohmann_json
    Threads::Threads
)

# MacOS 特殊处理
if(APPLE)
    target_link_libraries(${PROJECT_NAME}
        PRIVATE
        "-framework CoreFoundation"
        "-framework Security"
    )
endif()

# 编译选项
if(MSVC)
    target_compile_options(${PROJECT_NAME} PRIVATE /W4)
else()
    target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra)
endif()

# 设置输出目录
set_target_properties(${PROJECT_NAME}
    PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

# 打印最终的编译和链接标志
message(STATUS "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
message(STATUS "CMAKE_EXE_LINKER_FLAGS: ${CMAKE_EXE_LINKER_FLAGS}")

# 添加 Boost 相关的编译定义
target_compile_definitions(${PROJECT_NAME}
    PRIVATE
    BOOST_ASIO_NO_DEPRECATED
    BOOST_ASIO_DISABLE_BOOST_ARRAY
) 