include_directories(${CMAKE_SOURCE_DIR}/src)

set(mediascanner-qml_SOURCES
  plugin.cpp
  MediaFileWrapper.cpp
  MediaFileWrapper.h
  MediaStoreWrapper.cpp
  MediaStoreWrapper.h
  StreamingModel.cpp
  StreamingModel.h
  MediaFileModelBase.cpp
  MediaFileModelBase.h
  AlbumModelBase.cpp
  AlbumModelBase.h
  AlbumsModel.cpp
  AlbumsModel.h
  ArtistsModel.cpp
  ArtistsModel.h
  GenresModel.cpp
  GenresModel.h
  SongsModel.cpp
  SongsModel.h
  SongsSearchModel.cpp
  SongsSearchModel.h
)

if(ENABLE_QT6)
    qt_add_qml_module(mediascanner-qml
        URI MediaScanner
        VERSION 0.1
        SOURCES ${mediascanner-qml_SOURCES}
        PLUGIN_TARGET mediascanner-qml
        CLASS_NAME MediaScannerPlugin
        OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../MediaScanner
        NO_GENERATE_PLUGIN_SOURCE
        NO_GENERATE_QMLTYPES
        NO_PLUGIN_OPTIONAL)
    qt_query_qml_module(mediascanner-qml
        PLUGIN_TARGET module_plugin_target
        TARGET_PATH module_target_path
        QMLDIR module_qmldir
        TYPEINFO module_typeinfo
    )
    target_compile_definitions(mediascanner-qml PRIVATE -DQT_NO_KEYWORDS)
    target_link_libraries(mediascanner-qml PRIVATE
        Qt${QT_VERSION_MAJOR}::Core
        Qt${QT_VERSION_MAJOR}::Gui
        Qt${QT_VERSION_MAJOR}::Qml
        Qt${QT_VERSION_MAJOR}::Concurrent
        Qt${QT_VERSION_MAJOR}::DBus
        PkgConfig::DBUSCPP
        mediascanner
        ms-dbus)

    set(QML_PLUGIN_DIR "${CMAKE_INSTALL_LIBDIR}/qt${QT_VERSION_MAJOR}/qml/${module_target_path}")
    install(TARGETS "${module_plugin_target}" DESTINATION "${QML_PLUGIN_DIR}")
    install(FILES "${module_qmldir}" DESTINATION "${QML_PLUGIN_DIR}")
    # install(FILES "${module_typeinfo}" DESTINATION "${QML_PLUGIN_DIR}")
else()
    set(QML_PLUGIN_DIR "${CMAKE_INSTALL_LIBDIR}/qt${QT_VERSION_MAJOR}/qml/MediaScanner.0.1")

    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTORCC ON)

    add_library(mediascanner-qml SHARED ${mediascanner-qml_SOURCES})
    target_compile_definitions(mediascanner-qml PRIVATE -DQT_NO_KEYWORDS)
    target_link_libraries(mediascanner-qml
        Qt5::Core
        Qt5::Gui
        Qt5::Qml
        Qt5::Concurrent
        Qt5::DBus
        PkgConfig::DBUSCPP
        mediascanner
        ms-dbus)

    install(
      TARGETS mediascanner-qml
      LIBRARY DESTINATION ${QML_PLUGIN_DIR}
    )

    file(GLOB QMLFILES
      qmldir
    )

    add_custom_target(mediascanner-qmlfiles ALL
      COMMAND cp ${QMLFILES} ${CMAKE_CURRENT_BINARY_DIR}
      DEPENDS ${QMLFILES}
    )

    install(
      FILES ${QMLFILES}
      DESTINATION ${QML_PLUGIN_DIR}
    )

    if(NOT CMAKE_CROSSCOMPILING)
      find_program(qmlplugindump_exe qmlplugindump)
      if(NOT qmlplugindump_exe)
        msg(FATAL_ERROR "Could not locate qmlplugindump.")
      endif()

      # qmlplugindump doesn't run reliably in the CI environment (it seems
      # to be instantiating the types, which fails when there is no media
      # database).  So add a 
      add_custom_target(update-qmltypes
        COMMAND QML2_IMPORT_PATH=${CMAKE_BINARY_DIR}/src/qml ${qmlplugindump_exe} -notrelocatable MediaScanner 0.1 > ${CMAKE_CURRENT_SOURCE_DIR}/plugin.qmltypes
        DEPENDS mediascanner-qml mediascanner-qmlfiles
      )
    endif()

    install(
      FILES plugin.qmltypes
      DESTINATION ${QML_PLUGIN_DIR}
    )
endif()
