# 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/fidl/fidl.gni")
import("//build/package.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",
  ]
}

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

  sources = [
    "main.dart",
    "src/modules/ask_model.dart",
    "src/modules/ask_text_field.dart",
    "src/modules/ask_suggestion_list.dart",
    "src/modules/ask_module.dart",
    "src/utils/elevations.dart",
    "src/utils/session_shell_services.dart",
    "src/utils/key_chord_listener.dart",
    "src/models/web_proposer.dart",
    "src/models/app_model.dart",
    "src/models/story_model.dart",
    "src/models/story_manager.dart",
    "src/models/ermine_service_provider.dart",
    "src/models/package_proposer.dart",
    "src/widgets/app.dart",
    "src/widgets/stories.dart",
  ]

  deps = [
    ":shell.ermine",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.gfx",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.viewsv1token",
    "//sdk/fidl/fuchsia.modular",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//third_party/dart-pkg/pub/flutter_svg",
    "//third_party/dart-pkg/pub/uuid",
    "//topaz/public/dart/fuchsia_logger",
    "//topaz/public/dart/fuchsia_modular",
    "//topaz/public/dart/fuchsia_scenic_flutter",
    "//topaz/public/dart/fuchsia_services",
    "//topaz/public/dart/widgets:lib.widgets",
    "//topaz/public/lib/module_resolver/dart",
    "//topaz/public/lib/story/dart",
  ]
}

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.modular",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//topaz/public/dart/widgets:lib.widgets",
    "//topaz/public/lib/app_driver/dart",
    "//topaz/public/lib/widgets/dart",
  ]
}

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

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

package("launch_ermine") {
  deprecated_system_image = true

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

package("ermine_basemgr") {
  deprecated_system_image = true

  resources = [
    {
      path = rebase_path("config/basemgr.config")
      dest = "sysmgr/basemgr.config"
    },
  ]
}

package("ermine_fonts") {
  deprecated_system_image = true

  resources = [
    {
      path = rebase_path("fonts/manifest.json")
      dest = "vendor/fonts/manifest.json"
    },
    {
      path = rebase_path("//garnet/bin/fonts/third_party/robotomono/RobotoMono-Regular.ttf")
      dest = "vendor/fonts/RobotoMono-Regular.ttf"
    },
    {
      path = rebase_path("//garnet/bin/fonts/third_party/robotomono/RobotoMono-Medium.ttf")
      dest = "vendor/fonts/RobotoMono-Medium.ttf"
    },
    {
      path = rebase_path("//garnet/bin/fonts/third_party/robotomono/RobotoMono-Light.ttf")
      dest = "vendor/fonts/RobotoMono-Light.ttf"
    },
  ]
}