# 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/models/app_model.dart",
    "src/models/ermine_service_provider.dart",
    "src/models/default_proposer.dart",
    "src/models/package_proposer.dart",
    "src/models/story_manager.dart",
    "src/models/story_model.dart",
    "src/models/web_proposer.dart",
    "src/modules/ask_model.dart",
    "src/modules/ask_module.dart",
    "src/modules/ask_suggestion_list.dart",
    "src/modules/ask_text_field.dart",
    "src/utils/elevations.dart",
    "src/utils/key_chord_listener.dart",
    "src/utils/session_shell_services.dart",
    "src/widgets/app.dart",
    "src/widgets/stories.dart",
  ]

  deps = [
    ":shell.ermine",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/fidl/fuchsia.ui.viewsv1token",
    "//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",
  ]
}

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