# 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_dirs = [ "//third_party/protobuf/src" ]
  generate_python = false
  cc_generator_options = "lite"

  # deps = [ "$cobalt_root/src/registry:cobalt_registry_proto" ]

  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/testing:test_with_files",
    "$cobalt_root/src/local_aggregation_1.1/testing:test_registry",
    "$cobalt_root/src/logger:event_record",
    "$cobalt_root/src/logger:logger_test_utils",
    "$cobalt_root/src/logger:project_context_factory",
    "$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",
    "//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/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",
    "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",
  ]
}

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:encoder",
    "$cobalt_root/src/logger:project_context_factory",
    "$cobalt_root/src/pb:metadata_builder",
    "aggregation_procedures",
    "local_aggregate_storage",
  ]
  public_deps = [
    "$cobalt_root/src/logger:observation_writer",
    "$cobalt_root/src/logger:privacy_encoder",
  ]
}
