# Copyright 2018 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("//peridot/build/executable_package.gni")

group("all") {
  public_deps = [
    ":base",
    ":conjugate_ranked_passive_filter",
    ":ranked_active_filter",
    ":ranked_passive_filter",
  ]
}

group("base") {
  public_deps = [
    ":suggestion_active_filter",
    ":suggestion_passive_filter",
  ]
}

source_set("suggestion_passive_filter") {
  sources = [
    "suggestion_passive_filter.cc",
    "suggestion_passive_filter.h",
  ]

  deps = [
    "//peridot/bin/suggestion_engine:models",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("suggestion_active_filter") {
  sources = [
    "suggestion_active_filter.cc",
    "suggestion_active_filter.h",
  ]

  deps = [
    "//peridot/bin/suggestion_engine:models",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

source_set("conjugate_ranked_passive_filter") {
  sources = [
    "conjugate_ranked_passive_filter.cc",
    "conjugate_ranked_passive_filter.h",
  ]

  deps = [
    ":suggestion_passive_filter",
    "//peridot/public/fidl/fuchsia.modular",
  ]

  public_deps = [
    "//peridot/bin/suggestion_engine/ranking_features:ranking_feature",
  ]
}

executable("conjugate_ranked_passive_filter_unittest") {
  testonly = true

  sources = [
    "conjugate_ranked_passive_filter_unittest.cc",
  ]

  deps = [
    ":conjugate_ranked_passive_filter",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("ranked_passive_filter") {
  sources = [
    "ranked_passive_filter.cc",
    "ranked_passive_filter.h",
  ]

  deps = [
    ":suggestion_passive_filter",
    "//peridot/public/fidl/fuchsia.modular",
  ]

  public_deps = [
    "//peridot/bin/suggestion_engine/ranking_features:ranking_feature",
  ]
}

executable("ranked_passive_filter_unittest") {
  testonly = true

  sources = [
    "ranked_passive_filter_unittest.cc",
  ]

  deps = [
    ":ranked_passive_filter",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}

source_set("ranked_active_filter") {
  sources = [
    "ranked_active_filter.cc",
    "ranked_active_filter.h",
  ]

  deps = [
    ":suggestion_active_filter",
    "//peridot/public/fidl/fuchsia.modular",
  ]

  public_deps = [
    "//peridot/bin/suggestion_engine/ranking_features:ranking_feature",
  ]
}

executable("ranked_active_filter_unittest") {
  testonly = true

  sources = [
    "ranked_active_filter_unittest.cc",
  ]

  deps = [
    ":ranked_active_filter",
    "//garnet/public/lib/gtest",
    "//third_party/googletest:gtest_main",
  ]
}
