# Copyright 2019 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("//src/sys/core/build/core_shard.gni")

group("ui") {
  deps = [
    "a11y",
    "bin",
    "examples",
    "input",
    "scenic",
    "tools",
    "wayland",
  ]
}

group("tests") {
  testonly = true

  deps = [
    "a11y:tests",
    "backlight:tests",
    "benchmarks",
    "bin:tests",
    "examples:tests",
    "input:tests",
    "lib:tests",
    "light:tests",
    "scenic:tests",
    "tests",
    "tools:tests",
    "wayland:tests",
  ]
}

core_shard("ui_core_shard") {
  shard_file = "meta/ui.core_shard.cml"
}

core_shard("ui_with_root_presenter_core_shard") {
  shard_file = "meta/ui_with_root_presenter.core_shard.cml"
}

# TODO(b/215402056): Include Scenic for Root Presenter until Input Pipeline
# supports required FIDL services like FactoryResetCountdown. Otherwise
# remove this dep.
core_shard("ui_headless_core_shard") {
  shard_file = "meta/ui_with_root_presenter.core_shard.cml"
}

# core_shard("ui_headless_core_shard") {
#   shard_file = "meta/ui_headless.core_shard.cml"
# }

fuchsia_component("ui_component") {
  component_name = "ui"
  manifest = "meta/ui.cml"
}

fuchsia_component("ui_with_root_presenter_component") {
  component_name = "ui_with_root_presenter"
  manifest = "meta/ui_with_root_presenter.cml"
}

# TODO(b/215402056): Include Scenic for Root Presenter until Input Pipeline
# supports required FIDL services like FactoryResetCountdown. Otherwise
# remove this dep.
fuchsia_component("ui_headless_component") {
  component_name = "ui_with_root_presenter"
  manifest = "meta/ui_with_root_presenter.cml"
}

# fuchsia_component("ui_headless_component") {
#   component_name = "ui_headless"
#   manifest = "meta/ui_headless.cml"
# }

fuchsia_package("ui_pkg") {
  package_name = "ui"

  deps = [
    ":ui_component",
    ":ui_with_root_presenter_component",
  ]
}

fuchsia_package("ui_headless_pkg") {
  package_name = "ui"

  deps = [ ":ui_headless_component" ]
}

# runtime is the set of package dependencies desired for the construction of any
# product that includes UI.
group("runtime") {
  deps = [
    ":ui_pkg",
    "a11y",
    "scenic",
    "//src/graphics/bundles:vulkan",
    "//src/sys/activity",
  ]
}

# runtime_with_scene_manager is the set of package dependencies typically
# desired for the construction of a product that includes UI and scene manager
# (as opposed to root presenter).
group("runtime_with_scene_manager") {
  deps = [
    ":runtime",
    "bin/scene_manager",
  ]
}

# Runtime_root_presenter is the set of package dependencies typically desired
# for the construction of a product that includes UI (Scenic, A11y) and root
# presenter (as opposed to scene manager).
group("runtime_with_root_presenter") {
  deps = [
    ":runtime",
    "bin/input-pipeline",
    "bin/root_presenter",

    # TODO(fxbug.dev/82822): Remove after out-of-tree tests migrate to
    # text_manager.
    "bin/text:ime_service",
  ]
}

# runtime_headless is the set of package dependencies desired for the construction
# of any product that includes headless UI (button input and a11y features only).
group("runtime_headless") {
  # TODO(b/215402056): Include Scenic for Root Presenter until Input Pipeline
  # supports required FIDL services like FactoryResetCountdown. Otherwise
  # remove this dep.
  deps = [ ":runtime_with_root_presenter" ]
}
