cmake_minimum_required(VERSION 3.16)

if(DEFINED EVEREST_IO_WITH_MQTT AND NOT EVEREST_IO_WITH_MQTT)
    message(FATAL_ERROR "pionix_chargebridge requires MQTT support in everest::io. "
            "Set EVEREST_IO_WITH_MQTT=ON or disable EVEREST_BUILD_APPLICATIONS.")
endif()

find_package(ryml QUIET)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)


add_executable(pionix_chargebridge
  src/everest_api/api_connector.cpp
  src/everest_api/evse_bsp_api.cpp
  src/everest_api/ovm_api.cpp
  src/everest_api/ev_bsp_api.cpp

  src/firmware_update/sync_fw_updater.cpp

  src/utilities/filesystem.cpp
  src/utilities/logging.cpp
  src/utilities/parse_config.cpp
  src/utilities/print_config.cpp
  src/utilities/string.cpp
  src/utilities/symlink.cpp
  src/utilities/sync_udp_client.cpp
  src/utilities/type_converters.cpp

  src/can_bridge.cpp
  src/charge_bridge.cpp
  src/bsp_bridge.cpp
  src/gpio_bridge.cpp
  src/heartbeat_service.cpp
  src/plc_bridge.cpp
  src/serial_bridge.cpp
  src/discovery.cpp

  main.cpp
)

target_link_libraries(pionix_chargebridge
  everest::io
  everest::everest_api_types
  nlohmann_json::nlohmann_json
  ryml::ryml
)

target_include_directories(pionix_chargebridge
  PRIVATE include
  PRIVATE shared
)

set(cb_firmware_binary config/firmware/charge-bridge-fw_complete.cbfw)

add_custom_command(
  TARGET pionix_chargebridge
  POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy
  "${CMAKE_CURRENT_SOURCE_DIR}/${cb_firmware_binary}"
  "$<TARGET_FILE_DIR:pionix_chargebridge>/"
  COMMENT "Copying Pionix ChargeBridge firmware binary..."
)


install (TARGETS pionix_chargebridge)
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/${cb_firmware_binary}" DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/chargebridge/firmware)
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/config/config-CB-EVAL.yaml" DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/chargebridge RENAME "config-CB-EVAL.yaml-example")
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/config/config-CB-SAT-AC.yaml" DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/chargebridge RENAME "config-CB-SAT-AC.yaml-example")
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/config/config-CB-EVAL-EV.yaml" DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/chargebridge RENAME "config-CB-EVAL-EV.yaml-example")
install (FILES "${CMAKE_CURRENT_SOURCE_DIR}/config/config-CB-EVAL-SIM.yaml" DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/chargebridge RENAME "config-CB-EVAL-SIM.yaml-example")
