# 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("//src/modular/build/modular_config/modular_config.gni")
import("//topaz/runtime/dart/flutter_test.gni")
import("//topaz/runtime/flutter_runner/flutter_app.gni")

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

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

  fuchsia_package_name = "ermine"
  package_name = "ermine"

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

  manifest = "pubspec.yaml"

  deps = [
    ":ermine_library",
  ]

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

dart_library("ermine_library") {
  package_name = "ermine_library"

  sources = [
    "main.dart",
    "src/models/app_model.dart",
    "src/models/ask_model.dart",
    "src/models/cluster_model.dart",
    "src/models/ermine_story.dart",
    "src/models/status_model.dart",
    "src/models/topbar_model.dart",
    "src/utils/elevations.dart",
    "src/utils/keyboard_shortcuts.dart",
    "src/utils/styles.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/status.dart",
    "src/widgets/status/status_container.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/story_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.app.discover",
    "//sdk/fidl/fuchsia.bluetooth.control",
    "//sdk/fidl/fuchsia.intl",
    "//sdk/fidl/fuchsia.memory",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.power",
    "//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/settings",
    "//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_modular",
    "//topaz/public/dart/fuchsia_modular_flutter",
    "//topaz/public/dart/fuchsia_scenic_flutter",
    "//topaz/public/dart/fuchsia_services",
    "//topaz/public/dart/story_shell_labs:story_shell_labs_lib",
    "//topaz/public/dart/widgets:lib.widgets",
  ]
}

modular_config("ermine_modular_config") {
  config = "config/modular_config.json"
}

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 = [
    "ask_model_test.dart",
    "ask_widget_test.dart",
    "ermine_test.dart",
    "keyboard_shortcuts_test.dart",
  ]

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