# 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("sessionmgr") {
  meta = [
    {
      path = "meta/sessionmgr.cmx"
      dest = "sessionmgr.cmx"
    },
  ]

  sources = [
    "sessionmgr.cc",
  ]

  deps = [
    ":sessionmgr_lib",
    "//peridot/bin/basemgr/cobalt",
    "//peridot/lib/modular_config",
    "//peridot/public/lib/app_driver/cpp:app_driver",
    "//sdk/fidl/fuchsia.modular.internal",
    "//sdk/lib/fidl/cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider-with-fdio",
  ]
}

source_set("sessionmgr_lib") {
  sources = [
    "argv_injecting_launcher.cc",
    "argv_injecting_launcher.h",
    "sessionmgr_impl.cc",
    "sessionmgr_impl.h",
  ]

  public_deps = [
    "//garnet/public/lib/component/cpp",
    "//peridot/bin/sessionmgr/agent_runner",
    "//peridot/lib/rapidjson",
    "//peridot/lib/scoped_tmpfs",
    "//sdk/fidl/fuchsia.app.discover",
    "//sdk/fidl/fuchsia.ledger",
    "//sdk/fidl/fuchsia.ledger.cloud",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.auth",
    "//sdk/fidl/fuchsia.modular.internal",
    "//sdk/fidl/fuchsia.modular.session",
    "//sdk/fidl/fuchsia.net.oldhttp",
    "//sdk/fidl/fuchsia.speech",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//src/ledger/cloud_provider_firestore/bin/fidl",
  ]

  deps = [
    ":component_context",
    ":focus",
    ":presentation_provider",
    ":session_ctl",
    ":user_intelligence_provider",
    "//garnet/public/lib/fsl",
    "//peridot/bin/basemgr/cobalt",
    "//peridot/bin/sessionmgr/entity_provider_runner",
    "//peridot/bin/sessionmgr/message_queue",
    "//peridot/bin/sessionmgr/puppet_master:make_production_impl",
    "//peridot/bin/sessionmgr/puppet_master:puppet_master_impl",
    "//peridot/bin/sessionmgr/puppet_master:story_command_executor",
    "//peridot/bin/sessionmgr/storage",
    "//peridot/bin/sessionmgr/storage:constants_and_utils",
    "//peridot/bin/sessionmgr/story_runner",
    "//peridot/lib/common:async_holder",
    "//peridot/lib/common:teardown",
    "//peridot/lib/device_info",
    "//peridot/lib/fidl:app_client",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:clone",
    "//peridot/lib/fidl:environment",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/lib/fidl:view_host",
    "//peridot/lib/ledger_client:constants",
    "//peridot/lib/ledger_client:operations",
    "//peridot/lib/ledger_client:types",
    "//peridot/lib/modular_config:modular_config",
    "//peridot/lib/module_manifest:module_facet_reader_impl",
    "//peridot/public/lib/app_driver/cpp:app_driver",
    "//peridot/public/lib/async/cpp:operation",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/ui/scenic/cpp",
    "//src/ledger/bin/fidl",
    "//src/lib/fxl",
  ]
}

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

  sources = [
    "dev_session_shell.cc",
  ]

  deps = [
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:single_service_app",
    "//peridot/lib/fidl:view_host",
    "//peridot/lib/rapidjson",
    "//peridot/lib/testing:test_driver",
    "//peridot/public/lib/app_driver/cpp",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

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

  deps = [
    "//garnet/public/lib/fsl",
    "//peridot/bin/sessionmgr/puppet_master:puppet_master_impl",
    "//src/lib/fxl",
    "//zircon/public/lib/fs",
  ]
}

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

  deps = [
    "//garnet/public/lib/fsl",
    "//peridot/bin/sessionmgr/agent_runner:public",
    "//peridot/bin/sessionmgr/entity_provider_runner",
    "//peridot/bin/sessionmgr/message_queue",
    "//peridot/bin/sessionmgr/storage:constants_and_utils",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/lib/ledger_client:operations",
    "//peridot/lib/ledger_client:page_client",
    "//peridot/lib/ledger_client:types",
    "//peridot/public/lib/async/cpp:operation",
    "//sdk/fidl/fuchsia.ledger",
    "//sdk/fidl/fuchsia.modular",
    "//src/ledger/bin/fidl",
    "//src/lib/fxl",
  ]
}

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

  deps = [
    "//garnet/public/lib/fsl",
    "//peridot/bin/sessionmgr/storage:constants_and_utils",
    "//peridot/lib/fidl:array_to_string",
    "//peridot/lib/fidl:clone",
    "//peridot/lib/fidl:json_xdr",
    "//peridot/lib/ledger_client:operations",
    "//peridot/lib/ledger_client:page_client",
    "//peridot/lib/ledger_client:types",
    "//peridot/lib/rapidjson",
    "//peridot/public/lib/async/cpp:operation",
    "//sdk/fidl/fuchsia.ledger",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.internal",
    "//sdk/fidl/fuchsia.modular.session",
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
  ]
}

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

  deps = [
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/lib/fidl/cpp",
    "//src/lib/fxl",
  ]
}

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

  public_deps = [
    "//sdk/lib/sys/cpp",
  ]

  deps = [
    ":focus",
    ":intelligence_services",
    ":rate_limited_retry",
    "//garnet/public/lib/svc/cpp",
    "//peridot/bin/basemgr/cobalt",
    "//peridot/lib:maxwell_internal",
    "//sdk/fidl/fuchsia.bluetooth.le",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.net.oldhttp",
    "//zircon/public/fidl/fuchsia-cobalt",
  ]
}

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

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

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

  public_deps = [
    "//zircon/public/lib/zx",
  ]
}

hermetic_tests_package("sessionmgr_unittests") {
  deps = [
    ":sessionmgr_impl_unittest",
  ]
  environments = basic_envs
}

executable("sessionmgr_impl_unittest") {
  testonly = true

  sources = [
    "sessionmgr_impl_unittest.cc",
  ]

  deps = [
    ":sessionmgr_lib",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/component/cpp/testing",
    "//garnet/public/lib/gtest",
    "//peridot/lib/fidl:clone",
    "//peridot/lib/ledger_client:constants",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:unit",
    "//sdk/lib/ui/scenic/cpp",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}
