# 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 = [
    "argv_injecting_launcher.cc",
    "argv_injecting_launcher.h",
    "sessionmgr.cc",
    "sessionmgr_impl.cc",
    "sessionmgr_impl.h",
  ]

  deps = [
    ":component_context",
    ":focus",
    ":new_modular_apis",  # Compile the new APIs to validate them while they are under review.
    ":presentation_provider",
    ":session_ctl",
    ":user_intelligence_provider",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//peridot/bin/basemgr/cobalt",
    "//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: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:page_client",
    "//peridot/lib/ledger_client:status",
    "//peridot/lib/ledger_client:types",
    "//peridot/lib/modular_config:modular_config",
    "//peridot/lib/module_manifest:module_facet_reader_impl",
    "//peridot/lib/rapidjson",
    "//peridot/lib/scoped_tmpfs",
    "//peridot/public/lib/app_driver/cpp:app_driver",
    "//peridot/public/lib/async/cpp:operation",
    "//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",
    "//sdk/fidl/fuchsia.ui.viewsv1",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/ui/scenic/cpp",
    "//src/ledger/bin/fidl",
    "//src/ledger/cloud_provider_firestore/bin/fidl",
    "//src/lib/fxl",
    "//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"
    },
  ]
}

# Collection of all new modular APIs while they undergo review.
group("new_modular_apis") {
  deps = [
    "//sdk/fidl/fuchsia.app",
    "//sdk/fidl/fuchsia.app.agent",
    "//sdk/fidl/fuchsia.app.sessioncontrol",
    "//sdk/fidl/fuchsia.app.sessionshell",
  ]
}

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 = [
    "//garnet/public/lib/component/cpp",
  ]

  deps = [
    ":focus",
    ":intelligence_services",
    ":rate_limited_retry",
    "//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",
  ]
}
