# Copyright 2022 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/components.gni")
import("//build/config.gni")

# Define a session manager package with a provided configuration file.
#
# Parameters
#
# `config` (required, string): path to a JSON configuration file configuring startup URL.
#
# `package_name` (optional, string): name of the package to create, defaults to `session_manager`.
template("session_manager_package") {
  assert(defined(invoker.config),
         "must define `config` as a path to JSON file with startup config")

  package_name = "session_manager"
  if (defined(invoker.package_name)) {
    package_name = invoker.package_name
  }

  component_target = "${target_name}_component"
  config_target = "${target_name}_config"
  manifest_target = "${target_name}_manifest_compile"

  fuchsia_component_manifest(manifest_target) {
    manifest = "//src/session/bin/session_manager/meta/session_manager.cml"
    component_name = "session_manager"
  }

  fuchsia_component(component_target) {
    cm_label = ":${manifest_target}"
    deps = [ "//src/session/bin/session_manager:bin" ]
  }

  fuchsia_structured_config_values(config_target) {
    cm_label = ":${manifest_target}"
    values_source = invoker.config
  }

  fuchsia_package(target_name) {
    package_name = package_name
    deps = [
      ":${component_target}",
      ":${config_target}",
    ]
  }
}
