import("//build/config/locales.gni")
import("//electron/buildflags/buildflags.gni")
import("//printing/buildflags/buildflags.gni")
import("//tools/grit/repack.gni")
import("//ui/base/ui_features.gni")

# See: //chrome/chrome_paks.gni
template("electron_repack_percent") {
  percent = invoker.percent

  repack(target_name) {
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "repack_whitelist",
                             "visibility",
                           ])

    # All sources should also have deps for completeness.
    sources = [
      "$root_gen_dir/components/components_resources_${percent}_percent.pak",
      "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_${percent}_percent.pak",
      "$root_gen_dir/ui/resources/ui_resources_${percent}_percent.pak",
    ]

    deps = [
      "//components/resources",
      "//third_party/blink/public:scaled_resources_${percent}_percent",
      "//ui/resources",
    ]

    if (defined(invoker.deps)) {
      deps += invoker.deps
    }

    if (toolkit_views) {
      sources += [ "$root_gen_dir/ui/views/resources/views_resources_${percent}_percent.pak" ]
      deps += [ "//ui/views/resources" ]
    }

    output = "${invoker.output_dir}/chrome_${percent}_percent.pak"
  }
}

template("electron_extra_paks") {
  repack(target_name) {
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "repack_whitelist",
                             "visibility",
                           ])
    output = "${invoker.output_dir}/resources.pak"
    sources = [
      "$root_gen_dir/chrome/browser_resources.pak",
      "$root_gen_dir/chrome/common_resources.pak",
      "$root_gen_dir/chrome/dev_ui_browser_resources.pak",
      "$root_gen_dir/components/components_resources.pak",
      "$root_gen_dir/content/browser/resources/media/media_internals_resources.pak",
      "$root_gen_dir/content/browser/tracing/tracing_resources.pak",
      "$root_gen_dir/content/browser/webrtc/resources/webrtc_internals_resources.pak",
      "$root_gen_dir/content/content_resources.pak",
      "$root_gen_dir/content/dev_ui_content_resources.pak",
      "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak",
      "$root_gen_dir/net/net_resources.pak",
      "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak",
      "$root_gen_dir/third_party/blink/public/resources/inspector_overlay_resources.pak",
      "$target_gen_dir/electron_resources.pak",
    ]
    deps = [
      "//chrome/browser:dev_ui_browser_resources",
      "//chrome/browser:resources",
      "//chrome/common:resources",
      "//components/resources",
      "//content:content_resources",
      "//content:dev_ui_content_resources",
      "//content/browser/resources/media:resources",
      "//content/browser/tracing:resources",
      "//content/browser/webrtc/resources",
      "//electron:resources",
      "//mojo/public/js:resources",
      "//net:net_resources",
      "//third_party/blink/public:devtools_inspector_resources",
      "//third_party/blink/public:resources",
      "//ui/resources",
    ]
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
    if (defined(invoker.additional_paks)) {
      sources += invoker.additional_paks
    }

    # New paks should be added here by default.
    sources += [
      "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
      "$root_gen_dir/ui/resources/webui_generated_resources.pak",
    ]
    deps += [ "//content/browser/devtools:devtools_resources" ]
    if (enable_pdf_viewer) {
      sources += [ "$root_gen_dir/chrome/pdf_resources.pak" ]
      deps += [ "//chrome/browser/resources/pdf:resources" ]
    }
    if (enable_print_preview) {
      sources += [ "$root_gen_dir/chrome/print_preview_resources.pak" ]
      deps += [ "//chrome/browser/resources/print_preview:resources" ]
    }
    if (enable_electron_extensions) {
      sources += [
        "$root_gen_dir/chrome/component_extension_resources.pak",
        "$root_gen_dir/extensions/extensions_renderer_resources.pak",
        "$root_gen_dir/extensions/extensions_resources.pak",
      ]
      deps += [
        "//chrome/browser/resources:component_extension_resources",
        "//extensions:extensions_resources",
      ]
    }
  }
}

template("electron_paks") {
  electron_repack_percent("${target_name}_100_percent") {
    percent = "100"
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "deps",
                             "output_dir",
                             "repack_whitelist",
                             "visibility",
                           ])
  }

  if (enable_hidpi) {
    electron_repack_percent("${target_name}_200_percent") {
      percent = "200"
      forward_variables_from(invoker,
                             [
                               "copy_data_to_bundle",
                               "deps",
                               "output_dir",
                               "repack_whitelist",
                               "visibility",
                             ])
    }
  }

  electron_extra_paks("${target_name}_extra") {
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "deps",
                             "output_dir",
                             "repack_whitelist",
                             "visibility",
                           ])
    if (defined(invoker.additional_extra_paks)) {
      additional_paks = invoker.additional_extra_paks
    }
  }

  repack_locales("${target_name}_locales") {
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "deps",
                             "visibility",
                           ])
    if (defined(invoker.locale_whitelist)) {
      repack_whitelist = invoker.locale_whitelist
    } else if (defined(invoker.repack_whitelist)) {
      repack_whitelist = invoker.repack_whitelist
    }

    source_patterns = [
      "${root_gen_dir}/chrome/locale_settings_",
      "${root_gen_dir}/chrome/platform_locale_settings_",
      "${root_gen_dir}/chrome/generated_resources_",
      "${root_gen_dir}/components/strings/components_locale_settings_",
      "${root_gen_dir}/components/strings/components_strings_",
      "${root_gen_dir}/device/bluetooth/strings/bluetooth_strings_",
      "${root_gen_dir}/extensions/strings/extensions_strings_",
      "${root_gen_dir}/services/strings/services_strings_",
      "${root_gen_dir}/third_party/blink/public/strings/blink_accessibility_strings_",
      "${root_gen_dir}/third_party/blink/public/strings/blink_strings_",
      "${root_gen_dir}/ui/strings/app_locale_settings_",
      "${root_gen_dir}/ui/strings/ax_strings_",
      "${root_gen_dir}/ui/strings/ui_strings_",
    ]
    deps = [
      "//chrome/app:generated_resources",
      "//chrome/app/resources:locale_settings",
      "//chrome/app/resources:platform_locale_settings",
      "//components/strings:components_locale_settings",
      "//components/strings:components_strings",
      "//device/bluetooth/strings",
      "//extensions/strings",
      "//services/strings",
      "//third_party/blink/public/strings",
      "//third_party/blink/public/strings:accessibility_strings",
      "//ui/strings:app_locale_settings",
      "//ui/strings:ax_strings",
      "//ui/strings:ui_strings",
    ]

    input_locales = platform_pak_locales
    output_dir = "${invoker.output_dir}/locales"

    if (is_mac) {
      output_locales = locales_as_apple_outputs
    } else {
      output_locales = platform_pak_locales
    }
  }

  group(target_name) {
    forward_variables_from(invoker, [ "deps" ])
    public_deps = [
      ":${target_name}_100_percent",
      ":${target_name}_extra",
      ":${target_name}_locales",
    ]
    if (enable_hidpi) {
      public_deps += [ ":${target_name}_200_percent" ]
    }
    if (defined(invoker.public_deps)) {
      public_deps += invoker.public_deps
    }
  }
}
