cmake_minimum_required(VERSION 3.16)
project(mirage_qt_ui LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

include(GNUInstallDirs)

find_package(Qt6 COMPONENTS Core Gui Widgets Test QUIET)
if(Qt6_FOUND)
  set(QT_PACKAGE Qt6)
else()
  find_package(Qt5 COMPONENTS Core Gui Widgets Test REQUIRED)
  set(QT_PACKAGE Qt5)
endif()

set(MIRAGE_QT_SOURCES
  src/main.cpp
  src/desktop_integration.cpp
  src/popup_menu_window.cpp
  src/tray_bridge_model.cpp
  src/tray_visuals.cpp
  src/tray_ui_logic.cpp
  mirage-qt-ui.qrc
)

set(MIRAGE_QT_HEADERS
  src/desktop_integration.h
  src/popup_menu_window.h
  src/tray_bridge_model.h
  src/tray_visuals.h
  src/tray_ui_logic.h
)

add_executable(mirage-qt-ui ${MIRAGE_QT_SOURCES} ${MIRAGE_QT_HEADERS})
target_link_libraries(mirage-qt-ui PRIVATE ${QT_PACKAGE}::Core ${QT_PACKAGE}::Gui ${QT_PACKAGE}::Widgets)
target_compile_definitions(mirage-qt-ui PRIVATE MIRAGE_QT_DESKTOP_FILE=\"${CMAKE_INSTALL_FULL_DATADIR}/applications/mirage-qt-ui.desktop\")

add_executable(mirage-qt-bridge-model-tests
  src/tray_bridge_model.cpp
  src/tray_bridge_model.h
  src/tray_bridge_model_test.cpp
)
target_link_libraries(mirage-qt-bridge-model-tests PRIVATE ${QT_PACKAGE}::Core ${QT_PACKAGE}::Gui ${QT_PACKAGE}::Widgets ${QT_PACKAGE}::Test)

add_executable(mirage-qt-ui-logic-tests
  src/tray_ui_logic.cpp
  src/tray_ui_logic.h
  src/tray_ui_logic_test.cpp
)
target_link_libraries(mirage-qt-ui-logic-tests PRIVATE ${QT_PACKAGE}::Core ${QT_PACKAGE}::Gui ${QT_PACKAGE}::Widgets ${QT_PACKAGE}::Test)

add_executable(mirage-qt-desktop-tests
  src/desktop_integration.cpp
  src/desktop_integration.h
  src/desktop_integration_test.cpp
)
target_link_libraries(mirage-qt-desktop-tests PRIVATE ${QT_PACKAGE}::Core ${QT_PACKAGE}::Gui ${QT_PACKAGE}::Widgets ${QT_PACKAGE}::Test)

add_executable(mirage-qt-visuals-tests
  src/tray_visuals.cpp
  src/tray_visuals.h
  src/tray_visuals_test.cpp
)
target_link_libraries(mirage-qt-visuals-tests PRIVATE ${QT_PACKAGE}::Core ${QT_PACKAGE}::Gui ${QT_PACKAGE}::Widgets ${QT_PACKAGE}::Test)

add_executable(mirage-qt-popup-tests
  src/popup_menu_window.cpp
  src/popup_menu_window.h
  src/popup_menu_window_smoke_test.cpp
)
target_link_libraries(mirage-qt-popup-tests PRIVATE ${QT_PACKAGE}::Core ${QT_PACKAGE}::Gui ${QT_PACKAGE}::Widgets ${QT_PACKAGE}::Test)

add_custom_target(mirage-qt-ui-tests
  DEPENDS mirage-qt-bridge-model-tests mirage-qt-ui-logic-tests mirage-qt-desktop-tests mirage-qt-visuals-tests mirage-qt-popup-tests
)

install(TARGETS mirage-qt-ui RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES mirage-qt-ui.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES ../../mirage/logos/logo.png DESTINATION ${CMAKE_INSTALL_DATADIR}/pixmaps RENAME mirage.png)
