# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

visibility = [ "$cobalt_root/*" ]

#TODO(rudominer) Delete once the Fuchsia build does not depend on this target.
group("encoder") {
  public_deps = [
    ":client_secret",
    ":system_data",
    "$cobalt_root/src/lib/util:clock",
    "$cobalt_root/src/lib/util:encrypted_message_util",
    "$cobalt_root/src/logger:internal_metrics",
    "$cobalt_root/src/observation_store",
    "$cobalt_root/src/uploader:shipping_manager",
  ]
}

source_set("configuration_data") {
  sources = [
    "configuration_data.cc",
    "configuration_data.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  visibility += [ "//src/cobalt/bin/app:lib" ]
}

source_set("system_data") {
  sources = [
    "system_data.cc",
    "system_data.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]
  deps = [
    "$cobalt_root/src:logging",
    "$cobalt_root/src/lib/util:protected_fields",
    "$cobalt_root/src/logger:internal_metrics",
    "//third_party/abseil-cpp",
  ]
  public_deps = [
    "$cobalt_root/src/pb",
    "$cobalt_root/src/registry:cobalt_registry_proto",
  ]
  visibility += [ "//src/cobalt/bin/app:lib" ]
}

source_set("client_secret") {
  sources = [
    "client_secret.cc",
    "client_secret.h",
  ]
  configs += [ "$cobalt_root:cobalt_config" ]

  deps = [
    "$cobalt_root/src/lib/crypto_util",
    "//third_party/abseil-cpp",
  ]
}

source_set("fake_system_data") {
  testonly = true

  sources = [ "fake_system_data.h" ]

  configs += [ "$cobalt_root:cobalt_config" ]

  deps = [ ":system_data" ]
}

source_set("unittests") {
  testonly = true

  sources = [
    "client_secret_test.cc",
    "system_data_test.cc",
  ]

  deps = [
    ":client_secret",
    ":system_data",
    "$cobalt_root/src:logging",
    "$cobalt_root/src/logger:fake_logger",
    "$cobalt_root/src/logger:internal_metrics",
    "//third_party/abseil-cpp",
    "//third_party/gflags",
    "//third_party/googletest:gtest",
  ]

  configs += [ "$cobalt_root:cobalt_config" ]
}
