# Copyright 2020 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/*" ]

import("//third_party/protobuf/proto_library.gni")

proto_library("proto") {
  proto_in_dir = "$cobalt_root"
  sources = [ "local_aggregation.proto" ]
  import_protobuf_full = true
  generate_python = false
  cc_generator_options = "lite"
  import_dirs = [
    "$cobalt_root",
    "$cobalt_root/src/pb",
  ]

  deps = [ "$cobalt_root/src/pb" ]

  extra_configs = [
    "$cobalt_root:cobalt_config",
    "$cobalt_root/src/registry:proto_config",
  ]
}

source_set("tests") {
  testonly = true
  deps = [
    ":backfill_manager",
    ":local_aggregation",
    ":observation_generator",
    ":proto",
    "$cobalt_root/src/algorithms/random:test_secure_random",
    "$cobalt_root/src/lib/util:clock",
    "$cobalt_root/src/lib/util:datetime_util",
    "$cobalt_root/src/lib/util:hash",
    "$cobalt_root/src/lib/util/testing:test_with_files",
    "$cobalt_root/src/local_aggregation_1_1/testing:test_registry",
    "$cobalt_root/src/logger:event_record",
    "$cobalt_root/src/logger:fake_logger",
    "$cobalt_root/src/logger:internal_metrics",
    "$cobalt_root/src/logger:logger_test_utils",
    "$cobalt_root/src/logger:project_context_factory",
    "$cobalt_root/src/public/lib:registry_identifiers",
    "$cobalt_root/src/public/lib/statusor",
    "$cobalt_root/src/registry/testing",
    "$cobalt_root/src/system_data:client_secret",
    "$cobalt_root/src/system_data:fake_system_data",
    "aggregation_procedures",
    "aggregation_procedures:tests",
    "local_aggregate_storage",
    "local_aggregate_storage:tests",
    "testing:report_all_test_registry_with_report_all_set",
    "testing:report_all_test_registry_with_select_last_set",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
  sources = [
    "backfill_manager_test.cc",
    "local_aggregation_test.cc",
    "observation_generator_test.cc",
  ]
}

source_set("local_aggregation") {
  sources = [
    "local_aggregation.cc",
    "local_aggregation.h",
  ]
  deps = [
    ":observation_generator",
    "$cobalt_root/src/lib/util:datetime_util",
    "$cobalt_root/src/lib/util:hash",
    "$cobalt_root/src/logger:encoder",
    "$cobalt_root/src/logger:event_record",
    "$cobalt_root/src/logger:privacy_encoder",
    "$cobalt_root/src/logger:project_context_factory",
    "$cobalt_root/src/pb:metadata_builder",
    "$cobalt_root/src/public:cobalt_config",
    "$cobalt_root/src/public/lib:registry_identifiers",
    "$cobalt_root/src/public/lib:status",
    "aggregation_procedures",
    "local_aggregate_storage",
  ]
  public_deps = [ "$cobalt_root/src/logger:observation_writer" ]
  configs += [ "$cobalt_root:cobalt_config" ]
}

source_set("backfill_manager") {
  sources = [
    "backfill_manager.cc",
    "backfill_manager.h",
  ]
  deps = [
    "$cobalt_root/src/lib/util:datetime_util",
    "aggregation_procedures",
  ]
  public_deps = [
    "$cobalt_root/src/public/lib:clock_interfaces",
    "$cobalt_root/src/public/lib/statusor",
  ]
}

source_set("observation_generator") {
  sources = [
    "observation_generator.cc",
    "observation_generator.h",
  ]
  deps = [
    ":backfill_manager",
    "$cobalt_root/src/lib/util:clock",
    "$cobalt_root/src/lib/util:datetime_util",
    "$cobalt_root/src/logger:project_context_factory",
    "$cobalt_root/src/pb:metadata_builder",
    "$cobalt_root/src/public/lib/statusor",
    "aggregation_procedures",
    "local_aggregate_storage",
  ]
  public_deps = [
    "$cobalt_root/src/logger:observation_writer",
    "$cobalt_root/src/logger:privacy_encoder",
    "$cobalt_root/src/public/lib:clock_interfaces",
  ]
}
