cmake_minimum_required(VERSION 3.16)
project(ukui-polkit-agent)

pkg_check_modules(KDKINFO REQUIRED kysdk-sysinfo)
pkg_check_modules(KDKWIDGETS REQUIRED kysdk-qtwidgets)
pkg_check_modules(KYSDKWAYLANDHELPER REQUIRED kysdk-waylandhelper)
pkg_check_modules(KYSDKWINDOWHELPER REQUIRED kysdk-ukuiwindowhelper)

# 根据Qt版本查找相应的PolkitQt包
if(QT_VERSION_MAJOR EQUAL 6)
    pkg_check_modules(QGS REQUIRED gsettings-qt6)
    find_package(PolkitQt6-1 REQUIRED 0.103.0)
    find_package(Qt6 COMPONENTS Core Widgets DBus Xml Network Svg)
    set(POLKITQT_PREFIX PolkitQt6-1)
else()
    pkg_check_modules(QGS REQUIRED gsettings-qt)
    find_package(PolkitQt5-1 REQUIRED 0.103.0)
    find_package(Qt5 COMPONENTS Core Widgets DBus X11Extras Xml Network Svg)
    set(POLKITQT_PREFIX PolkitQt5-1)
endif()
# 根据Qt版本查找相应的KF包
if(QT_VERSION_MAJOR EQUAL 6)
    # 尝试查找KF6，如果失败则回退到KF5
    find_package(KF6WindowSystem QUIET)
    if(KF6WindowSystem_FOUND)
        message(STATUS "Using KF6")
        set(KF_PREFIX KF6)
        set(KF_WINDOW_SYSTEM KF6::WindowSystem)
    else()
        message(STATUS "KF6 not found, using KF5")
        find_package(KF5WindowSystem REQUIRED)
        set(KF_PREFIX KF5)
        set(KF_WINDOW_SYSTEM KF5::WindowSystem)
    endif()
else()
    find_package(KF5WindowSystem REQUIRED)
    set(KF_PREFIX KF5)
    set(KF_WINDOW_SYSTEM KF5::WindowSystem)
endif()
find_package(X11 REQUIRED)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

set(LIB_ARCH_PATH /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE})

configure_file(
    ${PROJECT_SOURCE_DIR}/data/polkit-ukui-authentication-agent-1.desktop.in
    ${PROJECT_BINARY_DIR}/data/polkit-ukui-authentication-agent-1.desktop
    )

include_directories(
        ${QGS_INCLUDE_DIRS}
        ${KDKINFO_INCLUDE_DIRS}
        ${KDKWIDGETS_INCLUDE_DIRS}
        ${KYSDKWAYLANDHELPER_INCLUDE_DIRS}
        ${KYSDKWINDOWHELPER_INCLUDE_DIRS}
        )

link_directories(
    ${KDKINFO_LIBRARY_DIRS}
    ${KDKWIDGETS_LIBRARY_DIRS}
    ${KYSDKWAYLANDHELPER_LIBRARY_DIRS}
    ${KYSDKWINDOWHELPER_LIBRARY_DIRS}
    )

set(EXTRA_LIBS
        ${EXTRA_LIBS}
        ${QGS_LIBRARIES}
        ${KDKINFO_LIBRARIES}
        ${KDKWIDGETS_LIBRARIES}
        ${KYSDKWAYLANDHELPER_LIBRARIES}
        ${KYSDKWINDOWHELPER_LIBRARIES}
        )

# 根据Qt版本设置包含目录和资源处理
if(QT_VERSION_MAJOR EQUAL 6)
    include_directories(
        ${POLKITQT-1_INCLUDE_DIR}
        ../common
        ../bioauth/include
        )
    qt6_add_resources(polkit_SRCS assets.qrc)
    qt6_wrap_ui(polkit_SRCS
        src/mainwindow.ui
        )
else()
    include_directories(
        ${POLKITQT-1_INCLUDE_DIR}
        ../common
        ../bioauth/include
        )
    qt5_add_resources(polkit_SRCS assets.qrc)
    qt5_wrap_ui(polkit_SRCS
        src/mainwindow.ui
        )
endif()

set(polkit_SRCS
    ${polkit_SRCS}
    src/PolkitAgent.cpp
    src/mainwindow.cpp
    src/PolkitListener.cpp
    src/sessionmanager.cpp
    src/users.cpp
    src/pam-tally.c
    src/modeButton.cpp
    src/kalabel.cpp
    ../common/generic.cpp
    src/fullscreenbackground.h
    src/fullscreenbackground.cpp
    src/usdblockshortcut.h
    src/usdblockshortcut.cpp
    )

add_executable(polkit-ukui-authentication-agent-1 ${polkit_SRCS})
target_include_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKQTWIDGETS_PKG_INCLUDE_DIRS})
target_link_directories(polkit-ukui-authentication-agent-1 PRIVATE ${KYSDKQTWIDGETS_PKG_LIBRARY_DIRS})
# 根据Qt版本设置链接库
if(QT_VERSION_MAJOR EQUAL 6)
    target_link_libraries(polkit-ukui-authentication-agent-1
        Qt6::Core Qt6::Widgets Qt6::DBus ${EXTRA_LIBS} ${KF_WINDOW_SYSTEM}
        ${POLKITQT-1_LIBRARIES}
        ${KYSDKQTWIDGETS_PKG_LIBRARIES}
        BioAuthWidgets
        -lrt
        -lukui-log4qt
        )
else()
    target_link_libraries(polkit-ukui-authentication-agent-1
        Qt5::Core Qt5::Widgets Qt5::DBus ${EXTRA_LIBS} ${KF_WINDOW_SYSTEM}
        ${POLKITQT-1_LIBRARIES}
        ${KYSDKQTWIDGETS_PKG_LIBRARIES}
        BioAuthWidgets
        -lrt
        -lukui-log4qt
        )
endif()
install(TARGETS polkit-ukui-authentication-agent-1
    DESTINATION lib/${CMAKE_LIBRARY_ARCHITECTURE}/ukui-polkit)

# 翻译文件
file(GLOB ts_files i18n_ts/*.ts)
# 根据Qt版本使用相应的翻译函数
if(QT_VERSION_MAJOR EQUAL 6)
    qt6_add_translation(qm_files ${ts_files})
else()
    qt5_add_translation(qm_files ${ts_files})
endif()
add_custom_target(polkit_i18n DEPENDS ${qm_files} SOURCES ${ts_files})
add_dependencies(polkit-ukui-authentication-agent-1 polkit_i18n)

install(FILES ${qm_files} DESTINATION ${UKUI_BIOMETRIC_DIR}/i18n_qm/polkit)
install(FILES ${PROJECT_BINARY_DIR}/data/polkit-ukui-authentication-agent-1.desktop
    DESTINATION /etc/xdg/autostart)
install(FILES ${PROJECT_BINARY_DIR}/data/polkit-ukui-authentication-agent-1.desktop
    DESTINATION /usr/share/applications)
