# 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/uuid",
    "//third_party/dart/third_party/pkg/intl",
    "//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") ]
}
