cmake_minimum_required(VERSION 3.25...4.4)

include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/common/bootstrap.cmake" NO_POLICY_SCOPE)

project(${_name} VERSION ${_version})

option(ENABLE_FRONTEND_API "Use obs-frontend-api for UI functionality" OFF)
option(ENABLE_QT "Use Qt functionality" OFF)

include(compilerconfig)
include(defaults)
include(helpers)

configure_file(src/plugin-support.c.in src/plugin-support.c @ONLY)

execute_process(
  COMMAND git rev-parse --short HEAD
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  OUTPUT_VARIABLE GIT_COMMIT_HASH
  OUTPUT_STRIP_TRAILING_WHITESPACE
  ERROR_QUIET
)
if(NOT GIT_COMMIT_HASH)
  set(GIT_COMMIT_HASH "unknown")
endif()

add_library(${CMAKE_PROJECT_NAME} MODULE
        src/bilibili_api.hpp
        src/http_client.hpp
        src/plugin_utils.hpp
        src/md5.hpp
        src/qrcodegen/qrcodegen.hpp
        src/json11/json11.hpp
        src/core/config_manager.hpp
        src/core/qr_generator.hpp
        src/ui/menu_manager.hpp
        src/ui/dialog_factory.hpp
        src/plugin-main.cpp
        src/bilibili_api.cpp
        src/http_client.cpp
        src/plugin_utils.cpp
        src/md5.cpp
        src/qrcodegen/qrcodegen.cpp
        src/json11/json11.cpp
        src/core/config_manager.cpp
        src/core/qr_generator.cpp
        src/ui/menu_manager.cpp
        src/ui/dialog_factory.cpp
)

if(NOT TARGET OBS::libobs)
  find_package(libobs REQUIRED)
endif()
find_package(CURL REQUIRED)
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
        OBS::libobs
        CURL::libcurl
)

if(ENABLE_FRONTEND_API)
  if(NOT TARGET OBS::obs-frontend-api)
    find_package(obs-frontend-api REQUIRED)
  endif()
  target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE OBS::obs-frontend-api)
endif()

if(ENABLE_QT)
  find_package(Qt6 COMPONENTS Widgets Core)
  target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Qt6::Core Qt6::Widgets)
  target_compile_options(
    ${CMAKE_PROJECT_NAME}
    PRIVATE $<$<C_COMPILER_ID:Clang,AppleClang>:-Wno-quoted-include-in-framework-header -Wno-comma>
  )
  set_target_properties(
    ${CMAKE_PROJECT_NAME}
    PROPERTIES AUTOMOC ON AUTOUIC ON AUTORCC ON
  )
endif()

target_sources(${CMAKE_PROJECT_NAME} PRIVATE src/plugin-main.cpp)

target_compile_definitions(${CMAKE_PROJECT_NAME} PRIVATE
    "PLUGIN_VERSION_STR=\"${_version}\""
    "GIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\""
)

set_target_properties_plugin(${CMAKE_PROJECT_NAME} PROPERTIES OUTPUT_NAME ${_name})

# Install plugin and dependencies
install(TARGETS ${CMAKE_PROJECT_NAME}
        LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/obs-plugins/64bit"
)
