# src/qEmbyApp/CMakeLists.txt

# 界面语言：英文源文 + 简体中文。法语 .ts 保留仓库但不参与编译。
set(TS_FILES
    resources/i18n/qEmby_zh_CN.ts
)
# set(QSS_QWK_FILES ../../libs/qwindowkit/examples/mainwindow/mainwindow.qrc)
# set(QRC_QWK_FILES ../../libs/qwindowkit/examples/shared/resources/shared.qrc)
set(APP_QRC_FILES resources/resources.qrc)

file(GLOB_RECURSE APP_HEADERS CONFIGURE_DEPENDS "*.h")
file(GLOB_RECURSE APP_SOURCES CONFIGURE_DEPENDS "*.cpp")
list(FILTER APP_HEADERS EXCLUDE REGEX "/tests/")
list(FILTER APP_SOURCES EXCLUDE REGEX "/tests/")

qt_add_executable(qEmbyApp
    MANUAL_FINALIZATION
    ${APP_HEADERS}
    ${APP_SOURCES}
    ${TS_FILES}
    ${APP_QRC_FILES}
)

# ==========================================
# QML 模块：Widgets 混合迁移的 Quick 页面
# QML 页面通过 QuickPageHost (QQuickWidget) 嵌入现有页面栈；
# C++ 类型 (Theme 单例等) 通过 QML_ELEMENT 自动注册到 qEmby 模块。
# ==========================================
if(COMMAND qt_policy)
    qt_policy(SET QTP0004 NEW)
endif()

qt_add_qml_module(qEmbyApp
    URI qEmby
    VERSION 1.0
    RESOURCE_PREFIX /qt/qml
    QML_FILES
        qml/AppShell.qml
        qml/Router.qml
        qml/TitleBar.qml
        qml/SideBar.qml
        qml/components/SearchHistoryPopup.qml
        qml/ManagePage.qml
        qml/ManageDashboardPage.qml
        qml/LoginPage.qml
        qml/SearchPage.qml
        qml/CategoryPage.qml
        qml/FavoritesPage.qml
        qml/DashboardPage.qml
        qml/LibraryPage.qml
        qml/DetailPage.qml
        qml/SeasonPage.qml
        qml/PlayerPage.qml
        qml/IndependentPlayerWindow.qml
        qml/AdminUsersPage.qml
        qml/AdminTasksPage.qml
        qml/AdminLibrariesPage.qml
        qml/AdminLogsPage.qml
        qml/AdminCollectionsPage.qml
        qml/AdminTranscodingPage.qml
        qml/EmptyState.qml
        qml/SettingsPage.qml
        qml/SettingsAboutPage.qml
        qml/SettingsGeneralPage.qml
        qml/SettingsAppearancePage.qml
        qml/SettingsLibraryPage.qml
        qml/SettingsPlayerPage.qml
        qml/components/SettingsCard.qml
        qml/components/PageHeader.qml
        qml/components/SegmentedTabs.qml
        qml/components/CollapsibleSection.qml
        qml/components/ThemedButton.qml
        qml/components/ThemedSwitch.qml
        qml/components/ThemedComboBox.qml
        qml/components/ThemedTextField.qml
        qml/components/ThemedSpinBox.qml
        qml/components/ThemedSlider.qml
        qml/components/ThemedScrollBar.qml
        qml/components/ThemedDialog.qml
        qml/components/ConfirmDialog.qml
        qml/components/ToastHost.qml
        qml/components/LoadingState.qml
        qml/components/ErrorState.qml
        qml/components/MediaCard.qml
        qml/components/MediaGrid.qml
        qml/components/MediaList.qml
        qml/components/MediaSection.qml
        qml/MpvSpikePage.qml
        qml/MpvSpikeHarness.qml
    SOURCES
        quick/quicktheme.h quick/quicktheme.cpp
        quick/mpvitem.h quick/mpvitem.cpp
        quick/danmakupainteditem.h quick/danmakupainteditem.cpp
        quick/qmltask.h quick/qmltask.cpp
        quick/settingsviewmodel.h quick/settingsviewmodel.cpp
        quick/loginviewmodel.h quick/loginviewmodel.cpp
        quick/searchhistoryviewmodel.h quick/searchhistoryviewmodel.cpp
        quick/sidebarviewmodel.h quick/sidebarviewmodel.cpp
        quick/appshellhost.h quick/appshellhost.cpp
        quick/shelllifecyclecontroller.h quick/shelllifecyclecontroller.cpp
)

# qmltyperegistrar 生成的注册代码以 <quicktheme.h> 形式包含头文件
target_include_directories(qEmbyApp PRIVATE quick)

option(QEMBY_BUILD_NAVIGATION_TESTS
    "Build the lightweight NavigationController contract test" ON)
if(QEMBY_BUILD_NAVIGATION_TESTS)
    add_executable(qEmbyNavigationTest EXCLUDE_FROM_ALL
        tests/navigationcontroller_test.cpp
        quick/navigationcontroller.h quick/navigationcontroller.cpp
        quick/navigationroute.h quick/navigationroute.cpp
    )
    target_include_directories(qEmbyNavigationTest PRIVATE quick)
    target_link_libraries(qEmbyNavigationTest PRIVATE Qt${QT_VERSION_MAJOR}::Core)
endif()

# ==========================================
# 集成 libmpv 播放器核心
# Linux / macOS 优先使用系统安装的 libmpv
# ==========================================
qemby_link_libmpv(qEmbyApp)

# ==========================================
# 集成 MDK 播放器核心
# ==========================================

# 1. 动态定位根目录下的 libs/mdk-sdk 文件夹
# 如果 CMAKE_SOURCE_DIR 指向了 src/qEmbyApp，这里的路径可能会错，
# 但既然你之前 libmpv 能用，说明 CMAKE_SOURCE_DIR 是 qEmby 根目录。
# set(MDK_DIR "${CMAKE_SOURCE_DIR}/libs/mdk-sdk")
# set(MDK_DLL_FILE "${MDK_DIR}/bin/x64/mdk.dll")

# 2. 引入头文件目录
# target_include_directories(qEmbyApp PRIVATE "${MDK_DIR}/include")

# 3. 终极解法：直接指定 mdk.lib 的绝对物理路径
# set(MDK_LIB_FILE "${MDK_DIR}/lib/x64/mdk.lib")

# 如果你想加个保险，可以取消下面三行的注释来让 CMake 在生成期帮你检查路径是否正确
# if(NOT EXISTS "${MDK_LIB_FILE}")
#     message(FATAL_ERROR "绝对路径错误！找不到文件: ${MDK_LIB_FILE}")
# endif()

# add_custom_command(TARGET qEmbyApp POST_BUILD
#     COMMAND ${CMAKE_COMMAND} -E copy_if_different
#     "${MDK_DLL_FILE}"
#     $<TARGET_FILE_DIR:qEmbyApp>
#     COMMENT "正在自动拷贝 mdk.dll 到输出目录..."
# )

target_compile_definitions(qEmbyApp PRIVATE
    APP_NAME="${PROJECT_NAME}"
    APP_VERSION="${PROJECT_VERSION}"
)

target_link_libraries(qEmbyApp PRIVATE
    Qt${QT_VERSION_MAJOR}::Gui
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Network
    Qt${QT_VERSION_MAJOR}::OpenGLWidgets
    Qt${QT_VERSION_MAJOR}::Svg
    Qt${QT_VERSION_MAJOR}::Concurrent
    Qt${QT_VERSION_MAJOR}::Quick
    Qt${QT_VERSION_MAJOR}::Qml
    Qt${QT_VERSION_MAJOR}::QuickWidgets
    Qt${QT_VERSION_MAJOR}::QuickControls2
    qEmbyCore
    QWKWidgets
    QWKQuick
    WidgetFrame
    QCoro6::Core
    QCoro6::Network
    spdlog::spdlog
)
target_link_libraries(qEmbyApp PRIVATE Qt${QT_VERSION_MAJOR}::Core)

if(COMMAND qemby_apply_build_options)
    qemby_apply_build_options(qEmbyApp)
endif()

if(APPLE)
    target_link_libraries(qEmbyApp PRIVATE
        "-framework CoreFoundation"
        "-framework IOKit"
    )
endif()

if(TARGET Qt${QT_VERSION_MAJOR}::DBus)
    target_link_libraries(qEmbyApp PRIVATE Qt${QT_VERSION_MAJOR}::DBus)
    target_compile_definitions(qEmbyApp PRIVATE QEMBY_HAS_QT_DBUS=1)
endif()

# # 3. 处理翻译
# if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
#     # 注意路径从 ${CMAKE_SOURCE_DIR} 改为 ${CMAKE_CURRENT_SOURCE_DIR}
#     qt_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TS_FILES})
# else()
#     qt5_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TS_FILES})
# endif()


if(QT_VERSION_MAJOR EQUAL 6)
    # 自动编译 TS 为 QM，并将生成的 QM 虚拟嵌入到 :/i18n/ 资源路径下
    qt_add_translations(qEmbyApp
        TS_FILES ${TS_FILES}
        RESOURCE_PREFIX "/i18n"
        LUPDATE_OPTIONS -no-obsolete
    )
else()
    # 兼容 Qt 5.x 保留的后备方案
    qt5_create_translation(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR} ${TS_FILES})
    target_sources(qEmbyApp PRIVATE ${QM_FILES})
endif()

# 4. 设置平台属性
if(${QT_VERSION} VERSION_LESS 6.1.0)
    set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.hl.qEmby)
endif()

# 注意：目标从 qEmby 改为 qEmbyApp
set_target_properties(qEmbyApp PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    # MACOSX_BUNDLE_ICON_FILE app.icns # 如果未来需要适配 macOS 图标，取消此注释
)

# 5. 设置安装规则
include(GNUInstallDirs)

set(_qemby_app_runtime_install_dir "${CMAKE_INSTALL_BINDIR}")
if(UNIX AND NOT APPLE AND QEMBY_RUNTIME_LIB_SUBDIR)
    set(_qemby_app_runtime_install_dir
        "${CMAKE_INSTALL_LIBDIR}/${QEMBY_RUNTIME_LIB_SUBDIR}")
endif()

# 注意：目标从 qEmby 改为 qEmbyApp
install(TARGETS qEmbyApp
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${_qemby_app_runtime_install_dir}
)

# 6. 最终确定 (必须在 install() 之后)
if(QT_VERSION_MAJOR EQUAL 6)
    # 注意：目标从 qEmby 改为 qEmbyApp
    qt_finalize_executable(qEmbyApp)
endif()
