cmake_minimum_required(VERSION 3.25)
project(sonus-consumer LANGUAGES CXX)

foreach(dependency miniaudio OpenSSL SQLite3 raylib)
  set(CMAKE_DISABLE_FIND_PACKAGE_${dependency} TRUE)
endforeach()
find_package(sonus CONFIG REQUIRED)
get_target_property(sonus_links sonus::sonus INTERFACE_LINK_LIBRARIES)
if(sonus_links MATCHES "miniaudio|OpenSSL|SQLite|raylib")
  message(FATAL_ERROR "Sonus exposes a private dependency: ${sonus_links}")
endif()
foreach(dependency modulus::miniaudio modulus::openssl modulus::sqlite modulus::raylib)
  if(TARGET ${dependency})
    message(FATAL_ERROR "Sonus discovered an unrelated bridge: ${dependency}")
  endif()
endforeach()

option(SONUS_TEST_INSTALLED_CONFIG "Check installed Modulus component discovery" OFF)
if(SONUS_TEST_INSTALLED_CONFIG)
  find_package(modulus CONFIG REQUIRED OPTIONAL_COMPONENTS miniaudio unsupported)
  if(modulus_miniaudio_FOUND OR modulus_unsupported_FOUND)
    message(FATAL_ERROR "Unavailable optional components must not be found")
  endif()
  find_package(modulus CONFIG QUIET COMPONENTS unsupported)
  if(modulus_FOUND)
    message(FATAL_ERROR "An unknown required component must reject the package")
  endif()
  find_package(modulus CONFIG REQUIRED)
endif()

add_executable(sonus-consumer main.cpp)
target_link_libraries(sonus-consumer PRIVATE sonus::sonus)
target_compile_features(sonus-consumer PRIVATE cxx_std_23)
enable_testing()
add_test(NAME sonus-consumer COMMAND sonus-consumer)
