cmake_minimum_required(VERSION 3.20)

if(NOT TARGET Qt6::Qml)
    project(NebulaWindows LANGUAGES CXX)
    find_package(Qt6 6.4 REQUIRED COMPONENTS Core Gui Qml Network)
    qt_standard_project_setup(REQUIRES 6.4)
endif()

if(NOT TARGET Qt6::Network)
    find_package(Qt6 6.4 REQUIRED COMPONENTS Network)
endif()

if(NOT TARGET NebulaApplications)
    add_subdirectory(
        "${CMAKE_CURRENT_SOURCE_DIR}/../applications"
        "${CMAKE_CURRENT_BINARY_DIR}/nebula-applications"
    )
endif()

qt_add_library(NebulaWindows STATIC)

qt_add_qml_module(NebulaWindows
    URI Nebula.Windows
    VERSION 1.0
    RESOURCE_PREFIX /qt/qml
    SOURCES
        WindowTypes.hpp
        WindowBackend.hpp
        WindowModel.hpp
        WindowModel.cpp
        WorkspaceModel.hpp
        WorkspaceModel.cpp
        WindowService.hpp
        WindowService.cpp
        backends/sway/SwayIpcClient.hpp
        backends/sway/SwayIpcClient.cpp
        backends/sway/SwayWindowBackend.hpp
        backends/sway/SwayWindowBackend.cpp
)

target_include_directories(NebulaWindows
    PUBLIC
        "${CMAKE_CURRENT_SOURCE_DIR}"
    PRIVATE
        "${CMAKE_CURRENT_SOURCE_DIR}/backends/sway"
)

target_link_libraries(NebulaWindows
    PUBLIC
        Qt6::Core
        Qt6::Gui
        Qt6::Qml
        Qt6::Network
        NebulaApplications
)

set_target_properties(NebulaWindows PROPERTIES
    AUTOMOC ON
)

if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
    target_compile_options(NebulaWindows PRIVATE -Wall -Wextra)
endif()
