# 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/crash.dart",
    "src/utils/elevations.dart",
    "src/utils/presenter.dart",
    "src/utils/styles.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/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.device.manager",
    "//sdk/fidl/fuchsia.feedback",
    "//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/experiences/session_shells/ermine/tiler",
    "//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/intl",
    "//third_party/dart-pkg/pub/uuid",
    "//topaz/public/dart/fuchsia_inspect",
    "//topaz/public/dart/fuchsia_logger",
    "//topaz/public/dart/fuchsia_scenic_flutter",
    "//topaz/public/dart/fuchsia_services",
  ]

  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_model_test.dart",
    "app_widget_test.dart",
    "ask_model_test.dart",
    "ask_widget_test.dart",
    "clusters_model_test.dart",
    "crash_test.dart",
    "ermine_story_test.dart",
    "ermine_test.dart",
    "overview_widget_test.dart",
    "recents_widget_test.dart",
    "scrim_widget_test.dart",
    "status_model_test.dart",
    "topbar_model_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") ]
}
