find_package(Qt6 REQUIRED COMPONENTS ShaderTools Core Qml Gui Quick Concurrent Sql Network DBus CanvasPainter)
find_package(PkgConfig REQUIRED)
find_library(SENSORS_LIBRARY NAMES sensors REQUIRED)
find_path(SENSORS_INCLUDE_DIR NAMES sensors/sensors.h REQUIRED)
pkg_check_modules(Qalculate IMPORTED_TARGET libqalculate REQUIRED)
pkg_check_modules(Pipewire IMPORTED_TARGET libpipewire-0.3 REQUIRED)
pkg_check_modules(Aubio IMPORTED_TARGET aubio REQUIRED)
pkg_check_modules(Cava IMPORTED_TARGET libcava QUIET)
pkg_check_modules(GLIB REQUIRED glib-2.0 gobject-2.0 gio-2.0)

if(NOT Cava_FOUND)
	pkg_check_modules(Cava IMPORTED_TARGET cava REQUIRED)
endif()

if(NOT TARGET Sensors::Sensors)
	add_library(Sensors::Sensors UNKNOWN IMPORTED)
	set_target_properties(Sensors::Sensors PROPERTIES
		IMPORTED_LOCATION "${SENSORS_LIBRARY}"
		INTERFACE_INCLUDE_DIRECTORIES "${SENSORS_INCLUDE_DIR}"
	)
endif()

set(QT_QML_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/qml")
qt_standard_project_setup(REQUIRES 6.9)

function(qml_module arg_TARGET)
	cmake_parse_arguments(PARSE_ARGV 1 arg "" "URI" "SOURCES;LIBRARIES;RESOURCES")
	qt_add_qml_module(${arg_TARGET}
		URI ${arg_URI}
		VERSION 1.0
		SOURCES ${arg_SOURCES}
		RESOURCES ${arg_RESOURCES}
	)

	qt_query_qml_module(${arg_TARGET}
		URI module_uri
		VERSION module_version
		PLUGIN_TARGET module_plugin_target
		TARGET_PATH module_target_path
		QMLDIR module_qmldir
		TYPEINFO module_typeinfo
	)
	set(module_dir "${INSTALL_QMLDIR}/${module_target_path}")
	install(TARGETS ${arg_TARGET} 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(${arg_TARGET} PRIVATE Qt::Core Qt::Qml ${arg_LIBRARIES})
endfunction()

set_source_files_properties("${SETTINGS_INDEX_JSON}" PROPERTIES QT_RESOURCE_ALIAS "settings-index.json")

qml_module(ZShell
	URI ZShell
	SOURCES
		writefile.hpp writefile.cpp
		appdb.hpp appdb.cpp
		imageanalyser.hpp imageanalyser.cpp
		requests.hpp requests.cpp
		toaster.hpp toaster.cpp
		qalculator.hpp qalculator.cpp
		zutils.hpp zutils.cpp
	RESOURCES
		"${SETTINGS_INDEX_JSON}"
	LIBRARIES
		Qt::Gui
		Qt::Quick
		Qt::Concurrent
		Qt::Sql
		Qt::DBus
		PkgConfig::Qalculate
)

target_compile_definitions(ZShell PRIVATE ZSHELL_VERSION="${VERSION}")

add_subdirectory(Models)
add_subdirectory(Internal)
add_subdirectory(Services)
add_subdirectory(Components)
add_subdirectory(Blobs)
