# Copyright 2018 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/config.gni")
import("//build/fidl/fidl.gni")
import("//build/package.gni")
import("//build/testing/flutter_driver.gni")
import("//src/lib/icu/tools/static_icu_data.gni")
import("//topaz/runtime/dart/flutter_test.gni")
import("//topaz/runtime/flutter_runner/flutter_app.gni")

group("shell") {
  public_deps = [
    ":ermine",
    ":ermine_fonts",
  ]
}

tz_ids_path = "${target_gen_dir}/tz_ids.txt"

flutter_app("ermine") {
  main_dart = "lib/main.dart"

  fuchsia_package_name = "ermine"
  package_name = "ermine"

  flutter_driver_extendable = flutter_driver_enabled

  meta = [
    {
      path = rebase_path("meta/ermine.cmx")
      dest = "ermine.cmx"
    },
  ]

  manifest = "pubspec.yaml"

  sources = [
    "main.dart",
    "src/models/app_model.dart",
    "src/models/ask_model.dart",
    "src/models/cluster_model.dart",
    "src/models/ermine_shell.dart",
    "src/models/ermine_story.dart",
    "src/models/status_model.dart",
    "src/models/topbar_model.dart",
    "src/utils/elevations.dart",
    "src/utils/styles.dart",
    "src/utils/presenter.dart",
    "src/utils/suggestion.dart",
    "src/utils/suggestions.dart",
    "src/utils/utils.dart",
    "src/widgets/app.dart",
    "src/widgets/ask/ask.dart",
    "src/widgets/ask/ask_container.dart",
    "src/widgets/ask/ask_suggestion_list.dart",
    "src/widgets/ask/ask_text_field.dart",
    "src/widgets/status/detail_status_entry.dart",
    "src/widgets/status/spec_builder.dart",
    "src/widgets/status/status.dart",
    "src/widgets/status/status_button.dart",
    "src/widgets/status/status_container.dart",
    "src/widgets/status/status_entry.dart",
    "src/widgets/status/status_graph.dart",
    "src/widgets/status/status_progress.dart",
    "src/widgets/story/cluster.dart",
    "src/widgets/story/clusters.dart",
    "src/widgets/story/fullscreen_story.dart",
    "src/widgets/story/remove_button_target_widget.dart",
    "src/widgets/story/thumbnails.dart",
    "src/widgets/story/tile_chrome.dart",
    "src/widgets/story/tile_sizer.dart",
    "src/widgets/story/tile_tab.dart",
    "src/widgets/support/animation_driver.dart",
    "src/widgets/support/get_bounds.dart",
    "src/widgets/support/home.dart",
    "src/widgets/support/home_container.dart",
    "src/widgets/support/keyboard_help.dart",
    "src/widgets/support/overview.dart",
    "src/widgets/support/recents.dart",
    "src/widgets/support/scrim.dart",
    "src/widgets/topbar/button.dart",
    "src/widgets/topbar/topbar.dart",
  ]

  deps = [
    "//sdk/fidl/fuchsia.bluetooth.control",
    "//sdk/fidl/fuchsia.intl",
    "//sdk/fidl/fuchsia.memory",
    "//sdk/fidl/fuchsia.power",
    "//sdk/fidl/fuchsia.session",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.input2",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.remotewidgets",
    "//sdk/fidl/fuchsia.ui.shortcut",
    "//sdk/fidl/fuchsia.ui.views",
    "//src/experiences/lib/quickui",
    "//src/experiences/session_shells/ermine/internationalization",
    "//src/experiences/session_shells/ermine/keyboard_shortcuts",
    "//src/experiences/session_shells/ermine/settings",
    "//src/sys/component_index/fidl:index",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//third_party/dart-pkg/git/flutter/packages/flutter_localizations",
    "//third_party/dart-pkg/pub/flutter_svg",
    "//third_party/dart-pkg/pub/uuid",
    "//third_party/dart/third_party/pkg/intl",
    "//topaz/lib/tiler",
    "//topaz/public/dart/fuchsia_inspect",
    "//topaz/public/dart/fuchsia_logger",
    "//topaz/public/dart/fuchsia_scenic_flutter",
    "//topaz/public/dart/fuchsia_services",
    "//topaz/public/dart/widgets:lib.widgets",
    "//zircon/system/fidl/fuchsia-device-manager",
  ]

  non_dart_deps = [ ":time_zone_list" ]

  resources = [
    {
      path = rebase_path("config/keyboard_shortcuts.json")
      dest = "keyboard_shortcuts.json"
    },
    {
      path = rebase_path(tz_ids_path)
      dest = "tz_ids.txt"
    },
  ]
}

static_icu_data("time_zone_list") {
  command = "tz-ids"
  output = tz_ids_path

  # Put these time zones at the top for the convenience of Fuchsia developers.
  fixed_order_ids = [
    "America/Los_Angeles",
    "America/New_York",
    "Europe/Paris",
    "Australia/Sydney",
  ]
  fixed_order = string_join(",", fixed_order_ids)
  command_args = [ "--fixed-order=${fixed_order}" ]
}

config_data("ermine_fonts") {
  for_pkg = "fonts"

  sources = [
    "fonts/manifest.json",
  ]

  sources += rebase_path([
                           "RobotoMono-Light.ttf",
                           "RobotoMono-Medium.ttf",
                           "RobotoMono-Regular.ttf",
                         ],
                         "",
                         "//prebuilt/third_party/fonts/robotomono/")

  outputs = [
    "fonts/{{source_file_part}}",
  ]
}

flutter_test("ermine_unittests") {
  sources = [
    "app_widget_test.dart",
    "ask_model_test.dart",
    "ask_widget_test.dart",
    "ermine_story_test.dart",
    "ermine_test.dart",
  ]

  deps = [
    ":ermine_dart_library",
    "//third_party/dart-pkg/git/flutter/packages/flutter_test",
    "//third_party/dart-pkg/pub/mockito",
    "//third_party/dart-pkg/pub/test",
  ]
}

config_data("services_config") {
  for_pkg = "sysmgr"
  sources = [
    rebase_path("config/ermine_services.config"),
  ]
}
