cmake_minimum_required(VERSION 3.28)
project(mafiaspace-broadcast LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(NOT WIN32 OR NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
  message(FATAL_ERROR "This build is only for Windows x64")
endif()
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Network)
set(probe "${CMAKE_CURRENT_SOURCE_DIR}/../../experiments/broadcast-probes")
add_library(mafiaspace-broadcast MODULE
  ${probe}/controller.cpp ${probe}/native_commands.cpp ${probe}/native_ownership.cpp
  ${probe}/ownership_journal.cpp ${probe}/ownership_recovery.cpp ${probe}/sources.cpp
  ${probe}/source_bindings.cpp ${probe}/source_setup.cpp ${probe}/club_sources.cpp ${probe}/pilot_setup.cpp
  ${probe}/platform_runtime.cpp ${probe}/night_controls.cpp ${probe}/night_checkpoint.cpp
  ${probe}/artwork_file.cpp ${probe}/cover_artwork.cpp ${probe}/cover_artwork_controls.cpp ${probe}/night_curtain.cpp ${probe}/plugin.cpp)
target_include_directories(mafiaspace-broadcast PRIVATE "${OBS_SDK}/libobs" "${OBS_SDK}/frontend/api" "${OBS_IMPORTS}")
target_compile_definitions(mafiaspace-broadcast PRIVATE NOMINMAX WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0A00)
target_compile_options(mafiaspace-broadcast PRIVATE /utf-8 /W4)
target_link_libraries(mafiaspace-broadcast PRIVATE Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Network
  "${OBS_IMPORTS}/obs.lib" "${OBS_IMPORTS}/obs-frontend-api.lib")
set_target_properties(mafiaspace-broadcast PROPERTIES PREFIX "")
enable_testing()
add_executable(windows-child-test ${CMAKE_CURRENT_SOURCE_DIR}/tests/child_test.cpp)
target_include_directories(windows-child-test PRIVATE ${probe})
target_compile_options(windows-child-test PRIVATE /utf-8 /W4)
target_link_libraries(windows-child-test PRIVATE Qt6::Core)
add_test(NAME windows-child-lifecycle COMMAND windows-child-test "${PYTHON_EXECUTABLE}")
add_executable(ownership-recovery-test ${probe}/test_ownership_recovery.cpp ${probe}/ownership_recovery.cpp)
target_link_libraries(ownership-recovery-test PRIVATE Qt6::Core)
add_test(NAME ownership-recovery COMMAND ownership-recovery-test)

add_executable(artwork-file-test ${probe}/test_artwork_file.cpp ${probe}/artwork_file.cpp)
target_include_directories(artwork-file-test PRIVATE ${probe})
target_link_libraries(artwork-file-test PRIVATE Qt6::Core Qt6::Gui)
add_test(NAME artwork-cache-validation COMMAND artwork-file-test)
