# This file is part of Desktop App Toolkit,
# a set of libraries for developing nice desktop applications.
#
# For license and copyright information please follow this link:
# https://github.com/desktop-app/legal/blob/master/LEGAL

add_library(external_webrtc INTERFACE IMPORTED GLOBAL)
add_library(desktop-app::external_webrtc ALIAS external_webrtc)

if (DESKTOP_APP_USE_PACKAGED)
    find_package(tg_owt REQUIRED)
    target_link_libraries(external_webrtc INTERFACE tg_owt::tg_owt)
else()
    set(webrtc_loc ${libs_loc}/tg_owt/src)
    set(webrtc_build_loc ${libs_loc}/tg_owt/out/$<IF:$<CONFIG:Debug>,Debug,Release>)

    target_compile_definitions(external_webrtc
    INTERFACE
        WEBRTC_ENABLE_PROTOBUF=0
        WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE
        RTC_ENABLE_VP9
        HAVE_SCTP
        WEBRTC_USE_H264
        WEBRTC_USE_BUILTIN_ISAC_FLOAT
        WEBRTC_LIBRARY_IMPL
        WEBRTC_NON_STATIC_TRACE_EVENT_HANDLERS=1
        ABSL_ALLOCATOR_NOTHROW=1
    )

    if (WIN32)
        set(webrtc_lib_prefix "")
        set(webrtc_lib_suffix .lib)

        target_compile_definitions(external_webrtc
        INTERFACE
            WEBRTC_WIN
        )
    else()
        set(webrtc_lib_prefix lib)
        set(webrtc_lib_suffix .a)

        if (APPLE)
            target_compile_definitions(external_webrtc
            INTERFACE
                WEBRTC_MAC
            )
        else()
            target_compile_definitions(external_webrtc
            INTERFACE
                WEBRTC_LINUX
                WEBRTC_USE_X11
                WEBRTC_USE_PIPEWIRE
            )
        endif()

        target_compile_definitions(external_webrtc
        INTERFACE
            WEBRTC_POSIX
        )
    endif()

    target_include_directories(external_webrtc SYSTEM
    INTERFACE
        ${webrtc_loc}
        ${webrtc_loc}/third_party/abseil-cpp
        ${webrtc_loc}/third_party/libyuv/include
    )

    set(webrtc_libs
        ${webrtc_lib_prefix}tg_owt
    )
    if (APPLE)
        target_include_directories(external_webrtc SYSTEM
        INTERFACE
            ${webrtc_loc}/sdk/objc
            ${webrtc_loc}/sdk/objc/base
            ${webrtc_loc}/sdk/objc/components/video_codec
        )
    endif()
    foreach (lib ${webrtc_libs})
        list(APPEND webrtc_libs_list "${webrtc_build_loc}/${lib}${webrtc_lib_suffix}")
    endforeach()

    target_link_libraries(external_webrtc
    INTERFACE
        ${webrtc_libs_list}
        desktop-app::external_openssl
        desktop-app::external_jpeg
        desktop-app::external_opus
    )

    if (WIN32)
        target_link_libraries(external_webrtc
        INTERFACE
            Secur32.lib # Required for rtc_base/http_common.cc
        )
    elseif (APPLE)
        target_link_libraries(external_webrtc
        INTERFACE
            -ObjC
        )
    else()
        # Required for desktop_capture
        target_link_static_libraries(external_webrtc
        INTERFACE
            Xcomposite
            Xdamage
            Xext
            Xfixes
            Xrandr
            Xrender
            Xtst
        )
        target_link_libraries(external_webrtc
        INTERFACE
            X11
            gio-2.0
            gobject-2.0
            glib-2.0
        )
    endif()
endif()
