cmake_minimum_required(VERSION 3.16)
project(w6e_sdk VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

option(W6E_BUILD_UI "Build Qt6 control panel" ON)
option(W6E_BUILD_EXAMPLES "Build CLI examples" ON)

add_library(w6e
  src/protocol.cpp
  src/transport.cpp
  src/custom_act.cpp
  src/hand_client.cpp
)
target_include_directories(w6e PUBLIC
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
  $<INSTALL_INTERFACE:include>
)

# 开发树里的 gestures.json 绝对路径，避免从 build/ 启动找不到
set(W6E_GESTURES_JSON "${CMAKE_CURRENT_SOURCE_DIR}/../common/gestures.json")
if(EXISTS "${W6E_GESTURES_JSON}")
  target_compile_definitions(w6e PRIVATE
    "W6E_GESTURES_JSON=\"${W6E_GESTURES_JSON}\"")
endif()

if(WIN32)
  target_compile_definitions(w6e PRIVATE _CRT_SECURE_NO_WARNINGS)
endif()

if(W6E_BUILD_EXAMPLES)
  add_executable(open_close examples/open_close.cpp)
  target_link_libraries(open_close PRIVATE w6e)

  add_executable(set_open_pct examples/set_open_pct.cpp)
  target_link_libraries(set_open_pct PRIVATE w6e)

  add_executable(gesture_ok examples/gesture_ok.cpp)
  target_link_libraries(gesture_ok PRIVATE w6e)

  add_executable(encoder_status examples/encoder_status.cpp)
  target_link_libraries(encoder_status PRIVATE w6e)

  add_executable(home_and_watch_faults examples/home_and_watch_faults.cpp)
  target_link_libraries(home_and_watch_faults PRIVATE w6e)

  set_target_properties(open_close set_open_pct gesture_ok encoder_status home_and_watch_faults PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/examples)
endif()

if(W6E_BUILD_UI)
  # Homebrew (Apple Silicon / Intel) 未 export 时，仍可找到 Qt6
  if(NOT Qt6_DIR AND NOT DEFINED CMAKE_PREFIX_PATH)
    foreach(_qt_hint
        /opt/homebrew/opt/qtbase
        /opt/homebrew/opt/qt
        /usr/local/opt/qtbase
        /usr/local/opt/qt)
      if(EXISTS "${_qt_hint}/lib/cmake/Qt6")
        list(APPEND CMAKE_PREFIX_PATH "${_qt_hint}")
        break()
      endif()
    endforeach()
  endif()
  find_package(Qt6 COMPONENTS Widgets QUIET)
  if(Qt6_FOUND)
    set(CMAKE_AUTOMOC ON)
    add_executable(w6e_control_panel
      ui/main.cpp
      ui/mainwindow.cpp
      ui/mainwindow.hpp
    )
    target_link_libraries(w6e_control_panel PRIVATE w6e Qt6::Widgets)
    if(EXISTS "${W6E_GESTURES_JSON}")
      target_compile_definitions(w6e_control_panel PRIVATE
        "W6E_GESTURES_JSON=\"${W6E_GESTURES_JSON}\"")
      add_custom_command(TARGET w6e_control_panel POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E make_directory
                "$<TARGET_FILE_DIR:w6e_control_panel>/common"
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
                "${W6E_GESTURES_JSON}"
                "$<TARGET_FILE_DIR:w6e_control_panel>/common/gestures.json"
        COMMENT "Copy gestures.json next to w6e_control_panel")
    endif()
    message(STATUS "Qt6 Widgets found: building w6e_control_panel")
  else()
    message(WARNING
      "Qt6 Widgets not found; skip w6e_control_panel.\n"
      "  macOS: brew install qtbase\n"
      "  then:  cmake -B build -DW6E_BUILD_UI=ON -DCMAKE_PREFIX_PATH=\"$(brew --prefix qtbase)\"\n"
      "  or set W6E_BUILD_UI=OFF to silence")
  endif()
endif()
