cmake_minimum_required(VERSION 3.16)

project(openkylin-token-center VERSION 1.0.0 LANGUAGES CXX)

set(APP_VERSION "1.0.0-ok1.7")

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

include(GNUInstallDirs)
include(CTest)
find_package(Qt6 6.0 REQUIRED COMPONENTS Core Gui Widgets Network Svg)

add_executable(openkylin-token-center
    src/main.cpp
    src/mainwindow.cpp
    src/mainwindow.h
    src/apiclient.cpp
    src/apiclient.h
    src/deviceservice.cpp
    src/deviceservice.h
    src/models.h
    resources/resources.qrc
    translations/translations.qrc
)

target_link_libraries(openkylin-token-center PRIVATE
    Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Network Qt6::Svg
)

target_compile_definitions(openkylin-token-center PRIVATE
    APP_VERSION="${APP_VERSION}"
    TRANSLATION_INSTALL_DIR="${CMAKE_INSTALL_FULL_DATADIR}/openkylin-token-center/translations"
)

install(TARGETS openkylin-token-center RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES packaging/org.openkylin.TokenCenter.desktop
    DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES resources/org.openkylin.TokenCenter.svg
    DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps)
set(APP_ICON_SIZES 16 24 32 48 64 128 256 512)
foreach(ICON_SIZE IN LISTS APP_ICON_SIZES)
    install(FILES resources/icons/${ICON_SIZE}x${ICON_SIZE}/org.openkylin.TokenCenter.png
        DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/${ICON_SIZE}x${ICON_SIZE}/apps)
endforeach()
install(FILES translations/openkylin-token-center_en.qm
    DESTINATION ${CMAKE_INSTALL_DATADIR}/openkylin-token-center/translations)

if(BUILD_TESTING)
    find_package(Qt6 6.0 QUIET COMPONENTS Test)
    if(TARGET Qt6::Test)
        add_executable(device-service-test
            tests/deviceservice_test.cpp
            src/deviceservice.cpp
            src/deviceservice.h
            src/models.h
        )
        target_include_directories(device-service-test PRIVATE src)
        target_link_libraries(device-service-test PRIVATE Qt6::Core Qt6::Network Qt6::Test)
        add_test(NAME device-service-test COMMAND device-service-test)
        set_tests_properties(device-service-test PROPERTIES
            ENVIRONMENT "XDG_CONFIG_HOME=${CMAKE_CURRENT_BINARY_DIR}/test-config")

        add_executable(api-client-test
            tests/apiclient_test.cpp
            src/apiclient.cpp
            src/apiclient.h
            src/deviceservice.cpp
            src/deviceservice.h
            src/models.h
        )
        target_include_directories(api-client-test PRIVATE src)
        target_compile_definitions(api-client-test PRIVATE APP_VERSION="${APP_VERSION}")
        target_link_libraries(api-client-test PRIVATE Qt6::Core Qt6::Gui Qt6::Network Qt6::Test)
        add_test(NAME api-client-test COMMAND api-client-test)
        set_tests_properties(api-client-test PROPERTIES
            ENVIRONMENT "XDG_CONFIG_HOME=${CMAKE_CURRENT_BINARY_DIR}/test-api-config")

    endif()
endif()

set(CPACK_GENERATOR "DEB")
set(CPACK_PACKAGE_NAME "openkylin-token-center")
set(CPACK_PACKAGE_VERSION "${APP_VERSION}")
set(CPACK_PACKAGE_CONTACT "openKylin Token Team")
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_DEBIAN_PACKAGE_DEPENDS "qt6-qpa-plugins, qt6-wayland, qt6-svg-plugins, qt6-translations-l10n")
set(CPACK_STRIP_FILES ON)
set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.openkylin.top/")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "openKylin Token installation verification client")
include(CPack)
