# Copyright 2018 The Chromium 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("//chromeos/assistant/assistant.gni")

assert(is_chromeos)

component("lib") {
  output_name = "assistant_service"

  friend = [
    ":tests",
    ":test_support",
  ]

  defines = [ "IS_ASSISTANT_SERVICE_IMPL" ]

  sources = [
    "assistant_manager_service.h",
    "assistant_settings_manager.h",
    "assistant_state_proxy.cc",
    "assistant_state_proxy.h",
    "constants.cc",
    "constants.h",
    "fake_assistant_manager_service_impl.cc",
    "fake_assistant_manager_service_impl.h",
    "fake_assistant_settings_manager_impl.cc",
    "fake_assistant_settings_manager_impl.h",
    "pref_connection_delegate.cc",
    "pref_connection_delegate.h",
    "service.cc",
    "service.h",
    "service_context.h",
  ]

  deps = [
    "//base",
    "//build/util:webkit_version",
    "//chromeos/assistant:buildflags",
    "//chromeos/audio",
    "//chromeos/constants",
    "//chromeos/dbus",
    "//chromeos/dbus/power",
    "//chromeos/dbus/power:power_manager_proto",
    "//chromeos/services/assistant/public/proto",
    "//components/account_id",
    "//components/prefs",
    "//components/user_manager",
    "//services/device/public/mojom",
    "//services/identity/public/mojom",
    "//services/network/public/cpp:cpp",
    "//services/preferences/public/cpp",
    "//services/preferences/public/mojom",
    "//ui/accessibility:ax_assistant",
  ]

  public_deps = [
    "//ash/public/cpp:cpp",
    "//chromeos/services/assistant/public:feature_flags",
    "//chromeos/services/assistant/public/cpp:prefs",
    "//chromeos/services/assistant/public/mojom",
    "//mojo/public/cpp/bindings:bindings",
    "//services/audio/public/cpp:cpp",
  ]

  if (enable_cros_libassistant) {
    sources += [
      "assistant_manager_service_delegate.h",
      "assistant_manager_service_delegate_impl.cc",
      "assistant_manager_service_delegate_impl.h",
      "assistant_manager_service_impl.cc",
      "assistant_manager_service_impl.h",
      "assistant_settings_manager_impl.cc",
      "assistant_settings_manager_impl.h",
      "chromium_api_delegate.cc",
      "chromium_api_delegate.h",
      "chromium_http_connection.cc",
      "chromium_http_connection.h",
      "cros_platform_api.h",
      "media_session/assistant_media_session.cc",
      "media_session/assistant_media_session.h",
      "platform/audio_device_owner.cc",
      "platform/audio_device_owner.h",
      "platform/audio_input_impl.cc",
      "platform/audio_input_impl.h",
      "platform/audio_input_provider_impl.cc",
      "platform/audio_input_provider_impl.h",
      "platform/audio_media_data_source.cc",
      "platform/audio_media_data_source.h",
      "platform/audio_output_provider_impl.cc",
      "platform/audio_output_provider_impl.h",
      "platform/audio_stream_handler.cc",
      "platform/audio_stream_handler.h",
      "platform/file_provider_impl.cc",
      "platform/file_provider_impl.h",
      "platform/network_provider_impl.cc",
      "platform/network_provider_impl.h",
      "platform/power_manager_provider_impl.cc",
      "platform/power_manager_provider_impl.h",
      "platform/system_provider_impl.cc",
      "platform/system_provider_impl.h",
      "platform/volume_control_impl.cc",
      "platform/volume_control_impl.h",
      "platform_api_impl.cc",
      "platform_api_impl.h",
      "utils.cc",
      "utils.h",
    ]

    deps += [
      "//chromeos/assistant/internal",
      "//chromeos/assistant/internal:build_libassistant",
      "//chromeos/assistant/internal/proto/google3",
      "//chromeos/dbus",
      "//chromeos/resources",
      "//chromeos/services/network_config/public/mojom",
      "//chromeos/strings",
      "//libassistant/shared/internal_api:fuchsia_api_helper",
      "//libassistant/shared/internal_api/c:api_wrappers_entrypoint",
      "//libassistant/shared/public",
      "//libassistant/shared/public:export",
      "//net",
      "//services/media_session/public/cpp",
      "//services/media_session/public/mojom",
      "//services/network/public/cpp",
      "//services/network/public/mojom",
      "//ui/base",
      "//url",
    ]

    libs = [ "$root_out_dir/libassistant.so" ]

    data = [
      "$root_out_dir/libassistant.so",
    ]
  }
}

source_set("tests") {
  testonly = true
  deps = [
    ":lib",
    "//ash/public/mojom",
    "//base",
    "//base/test:test_support",
    "//chromeos/audio",
    "//chromeos/dbus:test_support",
    "//chromeos/dbus/power",
    "//chromeos/services/assistant/public/cpp:prefs",
    "//chromeos/services/assistant/public/mojom",
    "//components/prefs:test_support",
    "//mojo/public/cpp/bindings:bindings",
    "//services/device/public/mojom",
    "//services/identity/public/mojom",
    "//services/network:test_support",
    "//services/network/public/cpp:cpp",
    "//testing/gmock",
    "//testing/gtest",
  ]

  sources = [
    "fake_client.cc",
    "fake_client.h",
    "service_unittest.cc",
    "test_support/fully_initialized_assistant_state.cc",
    "test_support/fully_initialized_assistant_state.h",
  ]

  if (enable_cros_libassistant) {
    sources += [
      "assistant_manager_service_impl_unittest.cc",
      "platform/audio_input_impl_unittest.cc",
      "platform/audio_output_provider_impl_unittest.cc",
      "platform/network_provider_impl_unittest.cc",
      "platform/power_manager_provider_impl_unittest.cc",
      "platform/system_provider_impl_unittest.cc",
      "test_support/fake_assistant_manager_service_delegate.cc",
      "test_support/fake_assistant_manager_service_delegate.h",
      "test_support/fake_platform_api.cc",
      "test_support/fake_platform_api.h",
      "test_support/mock_media_manager.cc",
      "test_support/mock_media_manager.h",
    ]

    deps += [
      "//chromeos/assistant/internal",
      "//chromeos/assistant/internal:test_support",
      "//chromeos/assistant/internal/proto/google3",
      "//chromeos/dbus",
      "//chromeos/services/network_config/public/mojom",
      "//services/audio/public/cpp:test_support",
      "//services/device/public/cpp:test_support",
    ]
  }
}

static_library("test_support") {
  testonly = true
  sources = [
    "test_support/mock_assistant.cc",
    "test_support/mock_assistant.h",
  ]
  deps = [
    "//base",
    "//chromeos/services/assistant/public/cpp:prefs",
    "//chromeos/services/assistant/public/mojom",
    "//testing/gmock",
  ]
}
