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

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

  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"
    },
  ]
}

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

  sources = [
    "main.dart",
    "src/models/app_model.dart",
    "src/models/cluster_model.dart",
    "src/models/ermine_service_provider.dart",
    "src/models/ermine_story.dart",
    "src/models/status_model.dart",
    "src/modules/ask_model.dart",
    "src/modules/ask_module.dart",
    "src/modules/ask_sheet.dart",
    "src/modules/ask_suggestion_list.dart",
    "src/modules/ask_text_field.dart",
    "src/utils/elevations.dart",
    "src/utils/key_chord_listener.dart",
    "src/widgets/app.dart",
    "src/widgets/cluster.dart",
    "src/widgets/clusters.dart",
    "src/widgets/fullscreen_story.dart",
    "src/widgets/remove_button_target_widget.dart",
    "src/widgets/status.dart",
    "src/widgets/story_widget.dart",
    "src/widgets/tile_chrome.dart",
    "src/widgets/tile_sizer.dart",
    "src/widgets/tile_tab.dart",
    "src/widgets/status_bar_visualizer.dart"
  ]

  deps = [
    ":shell.ermine",
    "//sdk/fidl/fuchsia.app.discover",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.views",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//third_party/dart-pkg/pub/flutter_svg",
    "//third_party/dart-pkg/pub/uuid",
    "//topaz/lib/tiler",
    "//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",
  ]
}

flutter_app("ermine_ask_module") {
  main_dart = "lib/src/modules/ask_module.dart"

  package_name = "ermine_ask_module"

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

  manifest = "ermine_ask_module_pubspec.yaml"

  deps = [
    ":shell.ermine",
    "//sdk/fidl/fuchsia.app.discover",
    "//sdk/fidl/fuchsia.modular",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//topaz/public/dart/widgets:lib.widgets",
    "//topaz/public/lib/widgets/dart",
  ]
}

fidl("shell.ermine") {
  name = "fuchsia.shell.ermine"

  sources = [
    "lib/src/modules/ask.fidl",
  ]
}

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",
                         ],
                         "",
                         "//garnet/bin/fonts/third_party/robotomono/")

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