# 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("//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/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp",
    "//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",
    ":state",
    "//garnet/public/fidl/fuchsia.media",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/media/timeline",
    "//peridot/bin/suggestion_engine/decision_policies:all",
    "//peridot/bin/suggestion_engine/filters:all",
    "//peridot/bin/suggestion_engine/rankers:all",
    "//peridot/bin/suggestion_engine/ranking_features:all",
    "//peridot/lib/bound_set",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/lib/util:rate_limited_retry",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/context/cpp:context_helper",
  ]
}

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:annoyance_ranking_feature_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:dead_story_ranking_feature_unittest",
    "//peridot/bin/suggestion_engine/ranking_features:focused_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",
  ]
}

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

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

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

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

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

  deps = [
    "//garnet/public/lib/fxl",
  ]

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

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

  deps = [
    ":models",
    ":state",
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
  ]

  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/user_runner/puppet_master:puppet_master_impl",
    "//peridot/lib/testing:test_story_command_executor",
    "//peridot/lib/testing:test_with_session_storage",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/fidl/fuchsia.modular.internal",
    "//third_party/googletest:gtest_main",
  ]
}
