find_package(PkgConfig REQUIRED)
pkg_check_modules(Qalculate IMPORTED_TARGET libqalculate REQUIRED)
pkg_check_modules(Aubio IMPORTED_TARGET aubio REQUIRED)
pkg_check_modules(Cava IMPORTED_TARGET cava REQUIRED)

qt_add_qml_module(caelestia
    URI Caelestia
    VERSION ${VERSION_SHORT}
    SOURCES
        cutils.hpp cutils.cpp
        cachingimagemanager.hpp cachingimagemanager.cpp
        filesystemmodel.hpp filesystemmodel.cpp
        qalculator.hpp qalculator.cpp
        beattracker.hpp beattracker.cpp
        service.hpp service.cpp
        serviceref.hpp serviceref.cpp
        audioprovider.hpp audioprovider.cpp
        cavaprovider.hpp cavaprovider.cpp
)

qt_query_qml_module(caelestia
    URI module_uri
    VERSION module_version
    PLUGIN_TARGET module_plugin_target
    TARGET_PATH module_target_path
    QMLDIR module_qmldir
    TYPEINFO module_typeinfo
)

message(STATUS "Created QML module ${module_uri}, version ${module_version}")

set(module_dir "${INSTALL_QMLDIR}/${module_target_path}")
install(TARGETS caelestia LIBRARY DESTINATION "${module_dir}" RUNTIME DESTINATION "${module_dir}")
install(TARGETS "${module_plugin_target}" LIBRARY DESTINATION "${module_dir}" RUNTIME DESTINATION "${module_dir}")
install(FILES "${module_qmldir}" DESTINATION "${module_dir}")
install(FILES "${module_typeinfo}" DESTINATION "${module_dir}")

target_link_libraries(caelestia PRIVATE
    Qt::Core Qt::Qml Qt::Gui Qt::Concurrent Qt::Multimedia
    PkgConfig::Qalculate PkgConfig::Aubio PkgConfig::Cava
)
