# 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")

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

  sources = [
    "device_map_impl.cc",
    "device_map_impl.h",
    "sessionmgr.cc",
    "sessionmgr_impl.cc",
    "sessionmgr_impl.h",
  ]

  deps = [
    ":component_context",
    ":focus",
    ":presentation_provider",
    ":session_ctl",
    ":user_intelligence_provider",
    "//garnet/public/fidl/fuchsia.net.oldhttp",
    "//garnet/public/fidl/fuchsia.ui.policy",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/bin/basemgr/cobalt",
    "//peridot/bin/cloud_provider_firestore/fidl",
    "//peridot/bin/ledger/fidl",
    "//peridot/bin/sessionmgr/agent_runner",
    "//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:names",
    "//peridot/lib/common:teardown",
    "//peridot/lib/common:xdr",
    "//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:page_client",
    "//peridot/lib/ledger_client:status",
    "//peridot/lib/ledger_client:types",
    "//peridot/lib/module_manifest:module_facet_reader_impl",
    "//peridot/lib/rapidjson",
    "//peridot/lib/scoped_tmpfs",
    "//peridot/public/fidl/fuchsia.ledger",
    "//peridot/public/fidl/fuchsia.ledger.cloud",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/fidl/fuchsia.modular.auth",
    "//peridot/public/fidl/fuchsia.modular.internal",
    "//peridot/public/fidl/fuchsia.speech",
    "//peridot/public/lib/app_driver/cpp:app_driver",
    "//peridot/public/lib/async/cpp:operation",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider",
  ]

  public_deps = [
    "//peridot/bin/basemgr/cobalt:basemgr_metrics_registry",
  ]

  resources = [
    {
      path = rebase_path(
              get_label_info(
                  "//peridot/bin/basemgr/cobalt:basemgr_metrics_registry",
                  "target_gen_dir") + "/basemgr_metrics_registry.pb")
      dest = "basemgr_metrics_registry.pb"
    },
  ]
}

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

  sources = [
    "dev_session_shell.cc",
  ]

  deps = [
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
    "//peridot/lib/common:names",
    "//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/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider",
  ]
}

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

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

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

  deps = [
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//peridot/bin/ledger/fidl",
    "//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/fidl/fuchsia.ledger",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/async/cpp:operation",
  ]
}

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

  deps = [
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//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/fidl/fuchsia.ledger",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/fidl/fuchsia.modular.internal",
    "//peridot/public/lib/async/cpp:operation",
  ]
}

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

  deps = [
    "//garnet/public/fidl/fuchsia.ui.policy",
    "//garnet/public/lib/fidl/cpp",
    "//garnet/public/lib/fxl",
    "//peridot/public/fidl/fuchsia.modular",
  ]
}

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

  public_deps = [
    "//garnet/public/lib/component/cpp",
  ]

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

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

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