# Copyright 2016 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("//build/testing/environments.gni")
import("//peridot/build/executable_package.gni")
import("//peridot/build/tests_package.gni")

executable_package("suggestion_engine") {
  meta = [
    {
      path = "meta/suggestion_engine.cmx"
      dest = "suggestion_engine.cmx"
    },
  ]

  resources = [
    {
      path = "resources/mod_pairs.json"
      dest = "ranking_data/mod_pairs.json"
    },
  ]

  sources = [
    "suggestion_engine_main.cc",
  ]

  deps = [
    ":debug",
    ":suggestion_engine_impl",
    "//garnet/public/lib/component/cpp",
    "//peridot/public/lib/app_driver/cpp",
    "//sdk/fidl/fuchsia.media",
    "//sdk/fidl/fuchsia.modular",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

source_set("suggestion_engine_impl") {
  sources = [
    "media_player.cc",
    "media_player.h",
    "navigation_processor.cc",
    "navigation_processor.h",
    "next_processor.cc",
    "next_processor.h",
    "proposal_publisher_impl.cc",
    "proposal_publisher_impl.h",
    "query_processor.cc",
    "query_processor.h",
    "query_runner.cc",
    "query_runner.h",
    "suggestion_engine_helper.cc",
    "suggestion_engine_helper.h",
    "suggestion_engine_impl.cc",
    "suggestion_engine_impl.h",
  ]

  deps = [
    ":debug",
    ":interruption_processor",
    ":models",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/media/timeline",
    "//peridot/bin/suggestion_engine/decision_policies",
    "//peridot/bin/suggestion_engine/filters",
    "//peridot/bin/suggestion_engine/rankers",
    "//peridot/bin/suggestion_engine/ranking_features",
    "//peridot/lib/bound_set",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/public/lib/context/cpp:context_helper",
    "//sdk/fidl/fuchsia.media",
    "//sdk/fidl/fuchsia.modular",
    "//src/lib/uuid",
  ]

  public_deps = [
    ":state",
  ]
}

tests_package("suggestion_engine_unittests") {
  deps = [
    ":suggestion_engine_impl_unittest",
    "//peridot/bin/suggestion_engine/decision_policies:rank_over_threshold_decision_policy_unittest",
    "//peridot/bin/suggestion_engine/filters:conjugate_ranked_passive_filter_unittest",
    "//peridot/bin/suggestion_engine/filters:ranked_active_filter_unittest",
    "//peridot/bin/suggestion_engine/filters:ranked_passive_filter_unittest",
    "//peridot/bin/suggestion_engine/rankers:linear_ranker_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:affinity_ranking_feature_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:annoyance_ranking_feature_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:dead_story_ranking_feature_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:interrupting_ranking_feature_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:kronk_ranking_feature_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:mod_pair_ranking_feature_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:proposal_hint_ranking_feature_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:query_match_ranking_feature_unittest",
  ]
  environments = basic_envs
}

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

  deps = [
    ":models",
    "//peridot/bin/suggestion_engine/decision_policies",
    "//peridot/bin/suggestion_engine/ranking_features:ranking_feature",
    "//sdk/fidl/fuchsia.modular",
  ]
}

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

  deps = [
    ":models",
    "//peridot/bin/suggestion_engine/filters:base",
    "//peridot/bin/suggestion_engine/rankers:ranker",
    "//peridot/public/lib/context/cpp:context_helper",
    "//sdk/fidl/fuchsia.modular",
    "//src/lib/fxl",
  ]
  public_deps = [
    "//peridot/bin/suggestion_engine/ranking_features:ranking_feature",
  ]
}

source_set("models") {
  sources = [
    "ranked_suggestion.cc",
    "ranked_suggestion.h",
    "suggestion_prototype.cc",
    "suggestion_prototype.h",
  ]

  deps = [
    "//src/lib/fxl",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.modular",
  ]
}

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

  deps = [
    ":models",
    ":state",
    "//sdk/fidl/fuchsia.modular",
    "//src/lib/fxl",
  ]

  public_deps = [
    "//peridot/lib/util:idle_waiter",
  ]
}

executable("suggestion_engine_impl_unittest") {
  testonly = true

  sources = [
    "suggestion_engine_impl_unittest.cc",
  ]

  deps = [
    ":suggestion_engine_impl",
    "//garnet/public/lib/fsl",
    "//peridot/bin/sessionmgr/puppet_master:puppet_master_impl",
    "//peridot/lib/testing:test_story_command_executor",
    "//peridot/lib/testing:test_with_session_storage",
    "//sdk/fidl/fuchsia.media",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.internal",
    "//third_party/googletest:gtest_main",
  ]
}
