# Copyright 2026 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//mojo/public/tools/bindings/mojom.gni")

mojom("mojo_bindings") {
  sources = [
    "skill.mojom",
    "skill_metrics.mojom",
  ]
  webui_module_path = "/"
  cpp_typemaps = [
    {
      types = [
        {
          mojom = "skills.mojom.Skill"
          cpp = "::skills::Skill"
        },
        {
          mojom = "skills.mojom.TopicInfo"
          cpp = "::skills::proto::TopicInfo"
        },
      ]
      traits_headers = [ "skills_mojom_traits.h" ]
      traits_sources = [ "skills_mojom_traits.cc" ]
      traits_public_deps = [
        ":skill",
        "//components/skills/proto",
      ]
    },
  ]
  public_deps = [
    "//mojo/public/mojom/base",
    "//url/mojom:url_mojom_gurl",
  ]
}

source_set("skill") {
  sources = [
    "skill.cc",
    "skill.h",
  ]
  public_deps = [
    "//base",
    "//components/sync/protocol",
    "//url",
  ]
}

source_set("types") {
  sources = [ "skills_types.h" ]
  public_deps = [
    ":skill",
    "//base",
    "//components/skills/proto",
  ]
}

source_set("public") {
  sources = [
    "skill_data_type_controller.cc",
    "skill_data_type_controller.h",
    "skills_features.cc",
    "skills_features.h",
    "skills_prefs.cc",
    "skills_prefs.h",
    "skills_provider.h",
    "skills_service.cc",
    "skills_service.h",
  ]

  public_deps = [
    ":metrics",
    ":skill",
    ":types",
    "//base",
    "//components/keyed_service/core",
    "//components/skills/internal:downloader",
    "//components/skills/proto",
    "//components/sync",
  ]

  deps = [
    "//components/pref_registry",
    "//components/prefs",
    "//components/skills:features",
  ]
}

source_set("metrics") {
  sources = [
    "skills_metrics.cc",
    "skills_metrics.h",
  ]

  public_deps = [
    ":skill",
    "//base",
    "//components/skills/public:mojo_bindings",
    "//components/skills/public:mojo_bindings__generator",
  ]

  deps = [ "//components/skills:features" ]
}

if (is_ios) {
  bundle_data("skills_metrics_test_bundle_data") {
    testonly = true
    sources = [ "//tools/metrics/histograms/metadata/skills/histograms.xml" ]

    outputs = [ "{{bundle_resources_dir}}/{{source_root_relative_dir}}/{{source_file_part}}" ]
  }
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "skill_unittest.cc",
    "skills_features_unittest.cc",
    "skills_metrics_unittest.cc",
    "skills_mojom_traits_unittest.cc",
  ]

  deps = [
    ":public",
    "//base/test:test_support",
    "//components/skills:features",
    "//components/sync_preferences:test_support",
  ]

  data = [ "//tools/metrics/histograms/metadata/skills/histograms.xml" ]

  if (is_ios) {
    deps += [ ":skills_metrics_test_bundle_data" ]
  }

  visibility = [ "//components/skills:unit_tests" ]
}
