/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.contentwarehouse.v1.model;

/**
 * LINT.IfChange Specifies identifier of a device AKA surface. Note there may be multiple device ids
 * for the same physical device E.g. Allo app and Assistant app on Nexus. Note: DeviceId usage is
 * complicated. Please do not depend on it for surface specific logic. Please use
 * google3/assistant/api/capabilities.proto instead. IMPORTANT: When checking for equality between
 * two `DeviceId`s, you should always use an `isSameDevice{As}` function to check for equality, as
 * deep equality between `DeviceId`'s is not guaranteed. * C++:
 * http://google3/assistant/assistant_server/util/device_id_util.cc;l=23;rcl=421295740 * Dart:
 * http://google3/assistant/context/util/lib/device_id.dart;l=26;rcl=442126145 * Java: http://google
 * 3/java/com/google/assistant/assistantserver/utils/DeviceIdHelper.java;l=9;rcl=390378522 See
 * http://go/deviceid-equality for more details. Next ID: 14
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Document AI Warehouse API. For a detailed explanation
 * see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class AssistantApiCoreTypesGovernedDeviceId extends com.google.api.client.json.GenericJson {

  /**
   * The client_instance_id on devices with GSA. See 'client_instance_field' in go/androidids.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String agsaClientInstanceId;

  /**
   * Allo Id. Corresponds to the GBotRequest.Sender.sender. NOTE(dychen): This may change to
   * standard android/ios physical device ids in order to enable shared data (e.g. installed app on
   * physical device shared between Allo and Opa apps on Nexus).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String alloDeviceId;

  /**
   * A unique device ID for Assistant devices as proposed by go/ocelot-team to solve the device id
   * fragmentation problem. The value of this id is the HomeGraph id of the device. See go/ocelot-
   * track-0-registry-design. New surfaces should use the canonical_device_id instead of using other
   * ids, and the registration should utilize the DeviceDataLayer (go/ddl-v0). Please contact the
   * assistant-state-management@ team for guidance. Note: We didn't reuse |home_graph_device_id|
   * because in Assistant code base |home_graph_device_id| is common to associate it with 3P
   * devices. See go/project-yellowstone for more context.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String canonicalDeviceId;

  /**
   * If set, indicates that the device is a cast device, and contains the UUID of the cast device.
   * Corresponds to the device_id field of the CastDevice proto.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String castDeviceId;

  /**
   * DUSI (go/dusi) is used as the identifier here. This identifier is unique to the user and
   * device. This will help identify which device or application the user's request originated from.
   * This is not to be confused with the client_instance_id that android devices provide. This is
   * currently used by surfaces that use the assistant-legacy-nexus and assistant-legacy-clockwork
   * pipelines. DUSI is created and set in S3. This field is only filled for GAIA requests.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String clientInstanceId;

  /**
   * A device ID produced by a connected dock, which is registered in HomeGraph.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String connectedDockId;

  /**
   * The unique DeviceConfig to the specific third party device. It is also used by Android Auto
   * Embedded first party device. See go/opa-ids.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiCoreTypesGovernedDeviceConfig deviceConfig;

  /**
   * DEPRECATED. assistant.api.core_types.governed.SurfaceIdentity.surface_type field should be used
   * instead. The device's surface type. This is the string version of surface_type. The server
   * should use the SurfaceType value derived from this string. If the device_type isn't supported
   * within the SurfaceType enum, it will be set as UNKNOWN. Developers should use the enum in
   * ServerParams instead of this string. WARNING: Clients are not actually setting this field. This
   * field will be removed once references to it within the code base have been removed.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String deviceType;

  /**
   * The unique device ID for HomeGraph devices. This is the HomeGraph ID, created when the device
   * is registered into HomeGraph. It is immutable for the same device unless it is completely
   * deleted and recreated. See go/home-graph for details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String homeGraphDeviceId;

  /**
   * The unique ID for libassistant based devices. See go/libassistant-id for details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String libassistantDeviceId;

  /**
   * If set, indicates that the device is participating the multi-hotword arbitration and the id is
   * an UUID to distinguish it from other devices. It should also be consistent between requests
   * from a single device within a session (or short duration).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String multiHotwordArbitrationDeviceId;

  /**
   * The unique device ID for the Assistant App on iOS. See go/opa-ios-design for details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String opaIosDeviceId;

  /**
   * The unique ID of a Quartz device. See go/quartz-design-doc for more details. Quartz ID is a
   * hash of (android_id + gaia).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String quartzDeviceId;

  /**
   * The client_instance_id on devices with GSA. See 'client_instance_field' in go/androidids.
   * @return value or {@code null} for none
   */
  public java.lang.String getAgsaClientInstanceId() {
    return agsaClientInstanceId;
  }

  /**
   * The client_instance_id on devices with GSA. See 'client_instance_field' in go/androidids.
   * @param agsaClientInstanceId agsaClientInstanceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setAgsaClientInstanceId(java.lang.String agsaClientInstanceId) {
    this.agsaClientInstanceId = agsaClientInstanceId;
    return this;
  }

  /**
   * Allo Id. Corresponds to the GBotRequest.Sender.sender. NOTE(dychen): This may change to
   * standard android/ios physical device ids in order to enable shared data (e.g. installed app on
   * physical device shared between Allo and Opa apps on Nexus).
   * @return value or {@code null} for none
   */
  public java.lang.String getAlloDeviceId() {
    return alloDeviceId;
  }

  /**
   * Allo Id. Corresponds to the GBotRequest.Sender.sender. NOTE(dychen): This may change to
   * standard android/ios physical device ids in order to enable shared data (e.g. installed app on
   * physical device shared between Allo and Opa apps on Nexus).
   * @param alloDeviceId alloDeviceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setAlloDeviceId(java.lang.String alloDeviceId) {
    this.alloDeviceId = alloDeviceId;
    return this;
  }

  /**
   * A unique device ID for Assistant devices as proposed by go/ocelot-team to solve the device id
   * fragmentation problem. The value of this id is the HomeGraph id of the device. See go/ocelot-
   * track-0-registry-design. New surfaces should use the canonical_device_id instead of using other
   * ids, and the registration should utilize the DeviceDataLayer (go/ddl-v0). Please contact the
   * assistant-state-management@ team for guidance. Note: We didn't reuse |home_graph_device_id|
   * because in Assistant code base |home_graph_device_id| is common to associate it with 3P
   * devices. See go/project-yellowstone for more context.
   * @return value or {@code null} for none
   */
  public java.lang.String getCanonicalDeviceId() {
    return canonicalDeviceId;
  }

  /**
   * A unique device ID for Assistant devices as proposed by go/ocelot-team to solve the device id
   * fragmentation problem. The value of this id is the HomeGraph id of the device. See go/ocelot-
   * track-0-registry-design. New surfaces should use the canonical_device_id instead of using other
   * ids, and the registration should utilize the DeviceDataLayer (go/ddl-v0). Please contact the
   * assistant-state-management@ team for guidance. Note: We didn't reuse |home_graph_device_id|
   * because in Assistant code base |home_graph_device_id| is common to associate it with 3P
   * devices. See go/project-yellowstone for more context.
   * @param canonicalDeviceId canonicalDeviceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setCanonicalDeviceId(java.lang.String canonicalDeviceId) {
    this.canonicalDeviceId = canonicalDeviceId;
    return this;
  }

  /**
   * If set, indicates that the device is a cast device, and contains the UUID of the cast device.
   * Corresponds to the device_id field of the CastDevice proto.
   * @return value or {@code null} for none
   */
  public java.lang.String getCastDeviceId() {
    return castDeviceId;
  }

  /**
   * If set, indicates that the device is a cast device, and contains the UUID of the cast device.
   * Corresponds to the device_id field of the CastDevice proto.
   * @param castDeviceId castDeviceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setCastDeviceId(java.lang.String castDeviceId) {
    this.castDeviceId = castDeviceId;
    return this;
  }

  /**
   * DUSI (go/dusi) is used as the identifier here. This identifier is unique to the user and
   * device. This will help identify which device or application the user's request originated from.
   * This is not to be confused with the client_instance_id that android devices provide. This is
   * currently used by surfaces that use the assistant-legacy-nexus and assistant-legacy-clockwork
   * pipelines. DUSI is created and set in S3. This field is only filled for GAIA requests.
   * @return value or {@code null} for none
   */
  public java.lang.String getClientInstanceId() {
    return clientInstanceId;
  }

  /**
   * DUSI (go/dusi) is used as the identifier here. This identifier is unique to the user and
   * device. This will help identify which device or application the user's request originated from.
   * This is not to be confused with the client_instance_id that android devices provide. This is
   * currently used by surfaces that use the assistant-legacy-nexus and assistant-legacy-clockwork
   * pipelines. DUSI is created and set in S3. This field is only filled for GAIA requests.
   * @param clientInstanceId clientInstanceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setClientInstanceId(java.lang.String clientInstanceId) {
    this.clientInstanceId = clientInstanceId;
    return this;
  }

  /**
   * A device ID produced by a connected dock, which is registered in HomeGraph.
   * @return value or {@code null} for none
   */
  public java.lang.String getConnectedDockId() {
    return connectedDockId;
  }

  /**
   * A device ID produced by a connected dock, which is registered in HomeGraph.
   * @param connectedDockId connectedDockId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setConnectedDockId(java.lang.String connectedDockId) {
    this.connectedDockId = connectedDockId;
    return this;
  }

  /**
   * The unique DeviceConfig to the specific third party device. It is also used by Android Auto
   * Embedded first party device. See go/opa-ids.
   * @return value or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceConfig getDeviceConfig() {
    return deviceConfig;
  }

  /**
   * The unique DeviceConfig to the specific third party device. It is also used by Android Auto
   * Embedded first party device. See go/opa-ids.
   * @param deviceConfig deviceConfig or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setDeviceConfig(AssistantApiCoreTypesGovernedDeviceConfig deviceConfig) {
    this.deviceConfig = deviceConfig;
    return this;
  }

  /**
   * DEPRECATED. assistant.api.core_types.governed.SurfaceIdentity.surface_type field should be used
   * instead. The device's surface type. This is the string version of surface_type. The server
   * should use the SurfaceType value derived from this string. If the device_type isn't supported
   * within the SurfaceType enum, it will be set as UNKNOWN. Developers should use the enum in
   * ServerParams instead of this string. WARNING: Clients are not actually setting this field. This
   * field will be removed once references to it within the code base have been removed.
   * @return value or {@code null} for none
   */
  public java.lang.String getDeviceType() {
    return deviceType;
  }

  /**
   * DEPRECATED. assistant.api.core_types.governed.SurfaceIdentity.surface_type field should be used
   * instead. The device's surface type. This is the string version of surface_type. The server
   * should use the SurfaceType value derived from this string. If the device_type isn't supported
   * within the SurfaceType enum, it will be set as UNKNOWN. Developers should use the enum in
   * ServerParams instead of this string. WARNING: Clients are not actually setting this field. This
   * field will be removed once references to it within the code base have been removed.
   * @param deviceType deviceType or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setDeviceType(java.lang.String deviceType) {
    this.deviceType = deviceType;
    return this;
  }

  /**
   * The unique device ID for HomeGraph devices. This is the HomeGraph ID, created when the device
   * is registered into HomeGraph. It is immutable for the same device unless it is completely
   * deleted and recreated. See go/home-graph for details.
   * @return value or {@code null} for none
   */
  public java.lang.String getHomeGraphDeviceId() {
    return homeGraphDeviceId;
  }

  /**
   * The unique device ID for HomeGraph devices. This is the HomeGraph ID, created when the device
   * is registered into HomeGraph. It is immutable for the same device unless it is completely
   * deleted and recreated. See go/home-graph for details.
   * @param homeGraphDeviceId homeGraphDeviceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setHomeGraphDeviceId(java.lang.String homeGraphDeviceId) {
    this.homeGraphDeviceId = homeGraphDeviceId;
    return this;
  }

  /**
   * The unique ID for libassistant based devices. See go/libassistant-id for details.
   * @return value or {@code null} for none
   */
  public java.lang.String getLibassistantDeviceId() {
    return libassistantDeviceId;
  }

  /**
   * The unique ID for libassistant based devices. See go/libassistant-id for details.
   * @param libassistantDeviceId libassistantDeviceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setLibassistantDeviceId(java.lang.String libassistantDeviceId) {
    this.libassistantDeviceId = libassistantDeviceId;
    return this;
  }

  /**
   * If set, indicates that the device is participating the multi-hotword arbitration and the id is
   * an UUID to distinguish it from other devices. It should also be consistent between requests
   * from a single device within a session (or short duration).
   * @return value or {@code null} for none
   */
  public java.lang.String getMultiHotwordArbitrationDeviceId() {
    return multiHotwordArbitrationDeviceId;
  }

  /**
   * If set, indicates that the device is participating the multi-hotword arbitration and the id is
   * an UUID to distinguish it from other devices. It should also be consistent between requests
   * from a single device within a session (or short duration).
   * @param multiHotwordArbitrationDeviceId multiHotwordArbitrationDeviceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setMultiHotwordArbitrationDeviceId(java.lang.String multiHotwordArbitrationDeviceId) {
    this.multiHotwordArbitrationDeviceId = multiHotwordArbitrationDeviceId;
    return this;
  }

  /**
   * The unique device ID for the Assistant App on iOS. See go/opa-ios-design for details.
   * @return value or {@code null} for none
   */
  public java.lang.String getOpaIosDeviceId() {
    return opaIosDeviceId;
  }

  /**
   * The unique device ID for the Assistant App on iOS. See go/opa-ios-design for details.
   * @param opaIosDeviceId opaIosDeviceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setOpaIosDeviceId(java.lang.String opaIosDeviceId) {
    this.opaIosDeviceId = opaIosDeviceId;
    return this;
  }

  /**
   * The unique ID of a Quartz device. See go/quartz-design-doc for more details. Quartz ID is a
   * hash of (android_id + gaia).
   * @return value or {@code null} for none
   */
  public java.lang.String getQuartzDeviceId() {
    return quartzDeviceId;
  }

  /**
   * The unique ID of a Quartz device. See go/quartz-design-doc for more details. Quartz ID is a
   * hash of (android_id + gaia).
   * @param quartzDeviceId quartzDeviceId or {@code null} for none
   */
  public AssistantApiCoreTypesGovernedDeviceId setQuartzDeviceId(java.lang.String quartzDeviceId) {
    this.quartzDeviceId = quartzDeviceId;
    return this;
  }

  @Override
  public AssistantApiCoreTypesGovernedDeviceId set(String fieldName, Object value) {
    return (AssistantApiCoreTypesGovernedDeviceId) super.set(fieldName, value);
  }

  @Override
  public AssistantApiCoreTypesGovernedDeviceId clone() {
    return (AssistantApiCoreTypesGovernedDeviceId) super.clone();
  }

}
