set(BIN_NAME dd-musicplayer-plugin)

set(QT_VERSION_MAJOR 6)
set(DTK_VERSION_MAJOR 6)

find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core DBus Widgets LinguistTools REQUIRED)
find_package(Dtk${DTK_VERSION_MAJOR} COMPONENTS Core Widget Gui REQUIRED)

find_library(DFM6_BASE_LIBRARIES
    NAMES dfm6-base libdfm6-base
    HINTS /usr/lib /usr/local/lib
    PATHS /usr/lib/x86_64-linux-gnu
)

find_library(DFM6_FRAMEWORK_LIBRARIES
    NAMES dfm6-framework libdfm6-framework
    HINTS /usr/lib /usr/local/lib
    PATHS /usr/lib/x86_64-linux-gnu
)

if(NOT DFM6_BASE_LIBRARIES OR NOT DFM6_FRAMEWORK_LIBRARIES)
    message(FATAL_ERROR "Cannot find dfm6-base or dfm6-framework libraries. "
                        "Please ensure dde-file-manager is installed.")
endif()

message(STATUS "Found dfm6-base: ${DFM6_BASE_LIBRARIES}")
message(STATUS "Found dfm6-framework: ${DFM6_FRAMEWORK_LIBRARIES}")

# ── Locate dfm-base include directory ──
# Strategy: bundled 3rdparty headers first (independent distribution),
#           then search system paths as fallback.
set(_bundled_include "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty")
set(DFM_INCLUDE_DIR "" CACHE PATH
    "Directory containing dfm-base/ headers. Defaults to bundled 3rdparty/ copy.")

if(NOT DFM_INCLUDE_DIR)
    # Prefer bundled copy for zero-dependency builds
    if(EXISTS "${_bundled_include}/dfm-base/dfm_log_defines.h")
        set(DFM_INCLUDE_DIR "${_bundled_include}")
    else()
        # Fallback: derive from installed library (multiarch-aware)
        get_filename_component(_dfm_libdir "${DFM6_BASE_LIBRARIES}" DIRECTORY)
        find_path(DFM_INCLUDE_DIR dfm-base/dfm_log_defines.h
            HINTS
                ${_dfm_libdir}/../../include/dde-file-manager
                ${_dfm_libdir}/../../../include/dde-file-manager
                ${_dfm_libdir}/../../include/dfm6
                /usr/include/dde-file-manager
                /usr/include/dfm6
                /usr/local/include/dde-file-manager
        )
    endif()
    if(NOT DFM_INCLUDE_DIR)
        message(FATAL_ERROR "Cannot find dfm-base headers.\n"
                            "Please ensure 3rdparty/ headers are present or install dfm6-base-dev.")
    endif()
endif()
message(STATUS "DFM include dir: ${DFM_INCLUDE_DIR}")

# UI layer
set(UI_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/ui/musicwidget.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/ui/musicwidget.h
)

# MPRIS layer
set(MPRIS_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/mpris/mpriscontroller.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/mpris/mpriscontroller.h
    ${CMAKE_CURRENT_SOURCE_DIR}/mpris/mprisplayerproxy.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/mpris/mprisplayerproxy.h
)

# Engine layer
set(ENGINE_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/engine/musicplayerengine.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/engine/musicplayerengine.h
    ${CMAKE_CURRENT_SOURCE_DIR}/engine/musicplayerplugin.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/engine/musicplayerplugin.h
)

# Config layer
set(CONFIG_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/config/musicplayerconfig.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/config/musicplayerconfig.h
)

# Menu layer
set(MENU_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/menu/musicplayermenuscene.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/menu/musicplayermenuscene.h
)

# Global header
set(GLOBAL_HEADERS
    ${CMAKE_CURRENT_SOURCE_DIR}/ddplugin_musicplayer_global.h
)

# State module
set(STATE_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/state/playerstatemodel.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/state/playerstatemodel.h
)


# Painter components
set(PAINTER_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/themeprovider.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/themeprovider.h
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/albumartpainter.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/albumartpainter.h
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/backgroundhelper.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/backgroundhelper.h
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/controlspainter.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/controlspainter.h
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/progressbarpainter.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/painters/progressbarpainter.h
)

# Layout painters
set(LAYOUT_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/baselayoutpainter.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/baselayoutpainter.h
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/squarelayoutpainter.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/squarelayoutpainter.h
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/horizontallayoutpainter.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/horizontallayoutpainter.h
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/verticallayoutpainter.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/verticallayoutpainter.h
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/layoutfactory.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/layouts/layoutfactory.h
)

# Desktop utility headers (from dde-file-manager)
set(DESKTOP_UTILS
    ${CMAKE_CURRENT_SOURCE_DIR}/desktoputils/ddpugin_eventinterface_helper.h
    ${CMAKE_CURRENT_SOURCE_DIR}/desktoputils/menu_eventinterface_helper.h
    ${CMAKE_CURRENT_SOURCE_DIR}/desktoputils/widgetutil.h
)

# dfm-base utility sources
set(DFM_UTILS
    ${CMAKE_CURRENT_SOURCE_DIR}/dfm-base/utils/windowutils.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/dfm-base/utils/windowutils.h
    ${CMAKE_CURRENT_SOURCE_DIR}/dfm-base/utils/universalutils.h
)

set(SRC_FILES
    ${UI_SOURCES}
    ${MPRIS_SOURCES}
    ${ENGINE_SOURCES}
    ${CONFIG_SOURCES}
    ${MENU_SOURCES}
    ${GLOBAL_HEADERS}
    ${STATE_SOURCES}
    ${PAINTER_SOURCES}
    ${LAYOUT_SOURCES}
    ${DESKTOP_UTILS}
    ${DFM_UTILS}
    ${CMAKE_CURRENT_SOURCE_DIR}/musicplayer.json
)

add_library(${BIN_NAME}
    SHARED
    ${SRC_FILES}
)

set_target_properties(${BIN_NAME} PROPERTIES
    LIBRARY_OUTPUT_DIRECTORY
    ${CMAKE_CURRENT_BINARY_DIR}
)

target_include_directories(${BIN_NAME} PUBLIC
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Widgets
    ${Qt${DTK_VERSION_MAJOR}Widgets_PRIVATE_INCLUDE_DIRS}
    Dtk${DTK_VERSION_MAJOR}::Core
    Dtk${DTK_VERSION_MAJOR}::Widget
    Dtk${DTK_VERSION_MAJOR}::Gui
    ${DFM_INCLUDE_DIR}
    ${CMAKE_SOURCE_DIR}/src
)

target_link_libraries(${BIN_NAME} PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::DBus
    Qt${QT_VERSION_MAJOR}::Widgets
    Dtk${DTK_VERSION_MAJOR}::Core
    Dtk${DTK_VERSION_MAJOR}::Widget
    Dtk${DTK_VERSION_MAJOR}::Gui
    ${DFM6_BASE_LIBRARIES}
    ${DFM6_FRAMEWORK_LIBRARIES}
)

install(TARGETS ${BIN_NAME} LIBRARY DESTINATION ${DFM_PLUGIN_DESKTOP_EDGE_DIR})

# ── InstallPrompt helper executable ──────────────────────────────
set(INSTALLPROMPT_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/installprompt/installprompt.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/installprompt/installprompt.h
    ${CMAKE_CURRENT_SOURCE_DIR}/installprompt/installpromptmain.cpp
)

add_executable(dd-musicplayer-install-prompt ${INSTALLPROMPT_SOURCES})

target_include_directories(dd-musicplayer-install-prompt PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Widgets
    Dtk${DTK_VERSION_MAJOR}::Core
    Dtk${DTK_VERSION_MAJOR}::Widget
    Dtk${DTK_VERSION_MAJOR}::Gui
)

target_link_libraries(dd-musicplayer-install-prompt PRIVATE
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Widgets
    Dtk${DTK_VERSION_MAJOR}::Core
    Dtk${DTK_VERSION_MAJOR}::Widget
    Dtk${DTK_VERSION_MAJOR}::Gui
)

install(TARGETS dd-musicplayer-install-prompt
        RUNTIME DESTINATION ${CMAKE_INSTALL_LIBEXECDIR}/dd-musicplayer-plugin)

dtk_add_config_meta_files(
    APPID "org.deepin.dde.file-manager"
    BASE "${CMAKE_SOURCE_DIR}/assets/configs"
    FILES "${CMAKE_SOURCE_DIR}/assets/configs/org.deepin.dde.file-manager.desktop.musicplayer.json"
)

set(TS_FILES
    ${CMAKE_SOURCE_DIR}/translations/dd-musicplayer-plugin_en.ts
    ${CMAKE_SOURCE_DIR}/translations/dd-musicplayer-plugin_zh_CN.ts
)

qt_add_lupdate(${BIN_NAME} TS_FILES ${TS_FILES} SOURCES ${SRC_FILES})
qt_add_lrelease(${BIN_NAME} TS_FILES ${TS_FILES})

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dd-musicplayer-plugin_en.qm
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/dd-musicplayer-plugin/translations)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dd-musicplayer-plugin_zh_CN.qm
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/dd-musicplayer-plugin/translations)