# 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.

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

static_library("encoder") {
  sources = [
    "encoder.cc",
    "encoder.h",
    "envelope_maker.cc",
    "envelope_maker.h",
    "file_observation_store.cc",
    "file_observation_store.h",
    "memory_observation_store.cc",
    "memory_observation_store.h",
    "observation_store.cc",
    "observation_store.h",
    "observation_store_update_recipient.h",
    "project_context.cc",
    "project_context.h",
    "send_retryer.cc",
    "send_retryer.h",
    "shipping_manager.cc",
    "shipping_manager.h",
    "shuffler_client.cc",
    "shuffler_client.h",
    "system_data.cc",
    "system_data.h",
    "upload_scheduler.cc",
    "upload_scheduler.h",

    # Includes from protobuf that are not included in protobuf lite
    "//third_party/protobuf/src/google/protobuf/io/zero_copy_stream_impl.cc",
    "//third_party/protobuf/src/google/protobuf/util/delimited_message_util.cc",
  ]
  public_configs = [ "//third_party/cobalt:cobalt_config" ]

  deps = [
    "//third_party/abseil-cpp/absl/synchronization:synchronization",
    "//third_party/cobalt/algorithms/forculus:forculus_encoder",
    "//third_party/cobalt/algorithms/rappor:rappor_encoder",
  ]

  public_deps = [
    ":client_secret",
    ":file_observation_store_internal_proto",
    "//garnet/public/lib/fxl",
    "//third_party/cobalt:cobalt_proto",
    "//third_party/cobalt/config:client_config",
    "//third_party/cobalt/config:cobalt_registry_proto",
    "//third_party/cobalt/shuffler:shuffler_service",
    "//third_party/cobalt/third_party/clearcut:clearcut",
    "//third_party/cobalt/util:clock",
    "//third_party/cobalt/util:encrypted_message_util",
    "//third_party/grpc:grpc++",
  ]
}

proto_library("file_observation_store_internal_proto") {
  sources = [
    "file_observation_store_internal.proto",
  ]
  extra_configs = [ "//third_party/cobalt:cobalt_config" ]
  import_dirs = [
    "//third_party/protobuf/src",
    "//third_party/cobalt",
  ]
  cc_generator_options = "lite"
  generate_python = false
  deps = [
    "//third_party/cobalt:cobalt_proto",
  ]
}

static_library("client_secret") {
  sources = [
    "client_secret.cc",
    "client_secret.h",
  ]
  configs += [ "//third_party/cobalt:cobalt_config" ]

  deps = [
    "//third_party/cobalt/util/crypto_util",
  ]
}

# Generate encoder_test_config.h from encoder_test_config.yaml.
cobalt_config_header("generate_encoder_test_config") {
  input_yaml = "encoder_test_config.yaml"
  output_file = "encoder_test_config.h"
}

# Generate envelope_maker_test_config.h from envelope_maker_test_config.yaml.
cobalt_config_header("generate_envelope_maker_test_config") {
  input_yaml = "envelope_maker_test_config.yaml"
  output_file = "envelope_maker_test_config.h"
}

# Generate shipping_manager_test_config.h from
# shipping_manager_test_config.yaml.
cobalt_config_header("generate_shipping_manager_test_config") {
  input_yaml = "shipping_manager_test_config.yaml"
  output_file = "shipping_manager_test_config.h"
}

source_set("unittests") {
  testonly = true

  sources = [
    "client_secret_test.cc",
    "encoder_test.cc",
    "encoder_test_config.h",
    "envelope_maker_test.cc",
    "envelope_maker_test_config.h",
    "send_retryer_test.cc",
    "shipping_manager_test.cc",
    "shipping_manager_test_config.h",
    "shuffler_client_test.cc",
    "system_data_test.cc",
  ]

  deps = [
    ":encoder",
    ":generate_encoder_test_config",
    ":generate_envelope_maker_test_config",
    ":generate_shipping_manager_test_config",
    "//third_party/abseil-cpp",
    "//third_party/gflags",
    "//third_party/googletest:gtest_main",

    # Note(rudominer) We need protobuf full here for deserializing ASCII
    # protos as part of the test.
    "//third_party/protobuf:protobuf_full",
  ]

  configs += [ "//third_party/cobalt:cobalt_config" ]
}
