# Copyright (c) 2023, AgiBot Inc.
# All rights reserved.

include(FetchContent)

message(STATUS "get opentelemetry_cpp ...")

set(opentelemetry_cpp_DOWNLOAD_URL
    "https://github.com/open-telemetry/opentelemetry-cpp/archive/v1.16.1.tar.gz"
    CACHE STRING "")

if(opentelemetry_cpp_LOCAL_SOURCE)
  FetchContent_Declare(opentelemetry_cpp SOURCE_DIR ${opentelemetry_cpp_LOCAL_SOURCE})
else()
  FetchContent_Declare(
    opentelemetry_cpp
    URL ${opentelemetry_cpp_DOWNLOAD_URL}
    DOWNLOAD_EXTRACT_TIMESTAMP TRUE)
endif()

FetchContent_GetProperties(opentelemetry_cpp)
if(NOT opentelemetry_cpp_POPULATED)
  set(BUILD_TESTING
      OFF
      CACHE BOOL "")

  set(WITH_BENCHMARK
      OFF
      CACHE BOOL "")

  set(WITH_EXAMPLES
      OFF
      CACHE BOOL "")

  set(WITH_FUNC_TESTS
      OFF
      CACHE BOOL "")

  set(WITH_NO_DEPRECATED_CODE
      ON
      CACHE BOOL "")

  set(WITH_DEPRECATED_SDK_FACTORY
      OFF
      CACHE BOOL "")

  set(WITH_OTLP_HTTP
      ON
      CACHE BOOL "")

  set(OTELCPP_PROTO_PATH
      ${opentelemetry_proto_SOURCE_DIR}
      CACHE PATH "")

  set(PROTOBUF_PROTOC_EXECUTABLE
      ${Protobuf_PROTOC_EXECUTABLE}
      CACHE STRING "")

  set(BUILD_SHARED_LIBS
      OFF
      CACHE BOOL "")

  FetchContent_MakeAvailable(opentelemetry_cpp)

  if(TARGET opentelemetry_api)
    add_library(opentelemetry-cpp::api ALIAS opentelemetry_api)
  endif()

  if(TARGET opentelemetry_sdk)
    add_library(opentelemetry-cpp::sdk ALIAS opentelemetry_sdk)
  endif()

  if(TARGET opentelemetry_ext)
    add_library(opentelemetry-cpp::ext ALIAS opentelemetry_ext)
  endif()

  if(TARGET opentelemetry_version)
    add_library(opentelemetry-cpp::version ALIAS opentelemetry_version)
  endif()

  if(TARGET opentelemetry_common)
    add_library(opentelemetry-cpp::common ALIAS opentelemetry_common)
  endif()

  if(TARGET opentelemetry_trace)
    add_library(opentelemetry-cpp::trace ALIAS opentelemetry_trace)
  endif()

  if(TARGET opentelemetry_metrics)
    add_library(opentelemetry-cpp::metrics ALIAS opentelemetry_metrics)
  endif()

  if(TARGET opentelemetry_logs)
    add_library(opentelemetry-cpp::logs ALIAS opentelemetry_logs)
  endif()

  if(TARGET opentelemetry_exporter_ostream_span)
    add_library(opentelemetry-cpp::ostream_span_exporter ALIAS opentelemetry_exporter_ostream_span)
  endif()

  if(TARGET opentelemetry_exporter_ostream_metrics)
    add_library(opentelemetry-cpp::ostream_metrics_exporter ALIAS opentelemetry_exporter_ostream_metrics)
  endif()

  if(TARGET opentelemetry_exporter_ostream_logs)
    add_library(opentelemetry-cpp::ostream_log_record_exporter ALIAS opentelemetry_exporter_ostream_logs)
  endif()

  if(TARGET opentelemetry_otlp_recordable)
    add_library(opentelemetry-cpp::otlp_recordable ALIAS opentelemetry_otlp_recordable)
  endif()

  if(TARGET opentelemetry_exporter_otlp_http_client)
    add_library(opentelemetry-cpp::otlp_http_client ALIAS opentelemetry_exporter_otlp_http_client)
  endif()

  if(TARGET opentelemetry_exporter_otlp_http)
    add_library(opentelemetry-cpp::otlp_http_exporter ALIAS opentelemetry_exporter_otlp_http)
  endif()

  if(TARGET opentelemetry_exporter_otlp_http_log)
    add_library(opentelemetry-cpp::otlp_http_log_record_exporter ALIAS opentelemetry_exporter_otlp_http_log)
  endif()

  if(TARGET opentelemetry_exporter_otlp_http_metric)
    add_library(opentelemetry-cpp::otlp_http_metric_exporter ALIAS opentelemetry_exporter_otlp_http_metric)
  endif()

  if(TARGET opentelemetry_http_client_curl)
    add_library(opentelemetry-cpp::http_client_curl ALIAS opentelemetry_http_client_curl)
  endif()

endif()

# import targets:
# opentelemetry-cpp::api
# opentelemetry-cpp::sdk
# opentelemetry-cpp::ext
# opentelemetry-cpp::version
# opentelemetry-cpp::common
# opentelemetry-cpp::trace
# opentelemetry-cpp::metrics
# opentelemetry-cpp::logs
# opentelemetry-cpp::ostream_span_exporter
# opentelemetry-cpp::ostream_metrics_exporter
# opentelemetry-cpp::ostream_log_record_exporter
# opentelemetry-cpp::otlp_recordable
# opentelemetry-cpp::otlp_http_client
# opentelemetry-cpp::otlp_http_exporter
# opentelemetry-cpp::otlp_http_log_record_exporter
# opentelemetry-cpp::otlp_http_metric_exporter
# opentelemetry-cpp::http_client_curl
