cmake_minimum_required(VERSION 3.22)
project(omarchy-task-manager VERSION 0.1.1 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt6 6.4 REQUIRED COMPONENTS Core Gui Quick Qml QuickControls2 Network)
find_program(CARGO cargo REQUIRED)
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/omarchy-task-manager-core
    COMMAND ${CARGO} build --release --locked --manifest-path ${CMAKE_SOURCE_DIR}/Cargo.toml --target-dir ${CMAKE_BINARY_DIR}/cargo
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/cargo/release/omarchy-task-manager-core ${CMAKE_BINARY_DIR}/omarchy-task-manager-core
    DEPENDS src/monitor.rs src/slow.rs src/bounded.rs src/command.rs src/desktop_entry.rs src/storage.rs src/main.rs src/process.rs src/metrics.rs src/desktop.rs src/manage.rs src/history.rs src/gpu.rs Cargo.toml Cargo.lock)
add_custom_target(core ALL DEPENDS ${CMAKE_BINARY_DIR}/omarchy-task-manager-core)
qt_add_executable(omarchy-task-manager ui/main.cpp ui/bridge.cpp ui/bridge.h ui/background.cpp ui/background.h)
set(TASK_MANAGER_QML ui/ColumnHeader.qml ui/omarchy-logo.svg ui/Main.qml ui/SummaryView.qml ui/HistoryChart.qml ui/PanelButton.qml ui/ManagementView.qml ui/PlainLabel.qml ui/Theme.js ui/TableViewport.qml)
qt_add_resources(omarchy-task-manager qml PREFIX "/" FILES ${TASK_MANAGER_QML})
target_link_libraries(omarchy-task-manager PRIVATE Qt6::Core Qt6::Gui Qt6::Quick Qt6::Qml Qt6::QuickControls2 Qt6::Network)
add_dependencies(omarchy-task-manager core)
include(GNUInstallDirs)
configure_file(packaging/omarchy-task-manager-monitor.service.in omarchy-task-manager-monitor.service @ONLY)
install(FILES ${CMAKE_BINARY_DIR}/omarchy-task-manager-monitor.service DESTINATION lib/systemd/user)
install(TARGETS omarchy-task-manager RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(PROGRAMS ${CMAKE_BINARY_DIR}/omarchy-task-manager-core DESTINATION lib/omarchy-task-manager)
install(FILES packaging/io.github.tcballard.TaskManager.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES packaging/io.github.tcballard.TaskManager.svg DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DATADIR}/licenses/omarchy-task-manager)
install(FILES packaging/bindings.lua.example DESTINATION ${CMAKE_INSTALL_DATADIR}/omarchy-task-manager)
include(CTest)
if(BUILD_TESTING)
    find_package(Qt6 REQUIRED COMPONENTS Test)
    qt_add_executable(bridge-test tests/bridge_test.cpp ui/bridge.cpp ui/bridge.h ui/background.cpp ui/background.h)
    target_include_directories(bridge-test PRIVATE ui)
    target_link_libraries(bridge-test PRIVATE Qt6::Core Qt6::Gui Qt6::Test)
    add_dependencies(bridge-test core)
    add_test(NAME bridge COMMAND bridge-test -nocrashhandler)
    set_tests_properties(bridge PROPERTIES TIMEOUT 60)
endif()
if(BUILD_TESTING)
    qt_add_executable(ui-test tests/ui_test.cpp ui/bridge.cpp ui/bridge.h ui/background.cpp ui/background.h)
    target_include_directories(ui-test PRIVATE ui)
    qt_add_resources(ui-test test_qml PREFIX "/" FILES ${TASK_MANAGER_QML})
    target_link_libraries(ui-test PRIVATE Qt6::Core Qt6::Gui Qt6::Quick Qt6::Qml Qt6::QuickControls2 Qt6::Test)
    add_dependencies(ui-test core)
    add_test(NAME ui COMMAND ui-test -nocrashhandler)
    set_tests_properties(ui PROPERTIES TIMEOUT 60)
endif()

if(BUILD_TESTING)
    find_package(Python3 REQUIRED COMPONENTS Interpreter)
    add_test(NAME background COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tests/background.py ${CMAKE_BINARY_DIR}/omarchy-task-manager-core)
    set_tests_properties(background PROPERTIES TIMEOUT 45)
endif()
