/*
 * 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;

/**
 * Model definition for QualityShoppingShoppingAttachmentProduct.
 *
 * <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 QualityShoppingShoppingAttachmentProduct extends com.google.api.client.json.GenericJson {

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private ShoppingWebentityShoppingAnnotationProductRating aggregateRating;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.math.BigInteger brandEntityId;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.math.BigInteger catalogId;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.math.BigInteger globalProductClusterId;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<ShoppingWebentityShoppingAnnotationProductImage> images;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityShoppingShoppingAttachmentLocale locale;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<QualityShoppingShoppingAttachmentMokaFacetValue> mokaFacet;

  static {
    // hack to force ProGuard to consider QualityShoppingShoppingAttachmentMokaFacetValue used, since otherwise it would be stripped out
    // see https://github.com/google/google-api-java-client/issues/543
    com.google.api.client.util.Data.nullOf(QualityShoppingShoppingAttachmentMokaFacetValue.class);
  }

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String nonDisplayableDescription;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String nonDisplayableTitle;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityShoppingShoppingAttachmentOffer offer;

  /**
   * Whether an outlink points to the same domain or off-domain. Only added if the relationship is
   * known, and the Offer has ref_type of OUTLINK.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String outlinkDomainRelationship;

  /**
   * Client needs to make decision on which field to use when both non_displayable_title and
   * pblock.final_title are present.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private QualityShoppingShoppingAttachmentPBlock pblock;

  /**
   * Product level Browseonomy ids from shopping_annotation.product.browseonomy.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.Integer> productBrowseonomyIds;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.math.BigInteger productClusterMid;

  /**
   * Organic product popularity.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Double productPopularity;

  /**
   * Relevance embedding from ShoppingAnnotation.Product
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<QualityRankembedMustangMustangRankEmbedInfo> relevanceEmbedding;

  static {
    // hack to force ProGuard to consider QualityRankembedMustangMustangRankEmbedInfo used, since otherwise it would be stripped out
    // see https://github.com/google/google-api-java-client/issues/543
    com.google.api.client.util.Data.nullOf(QualityRankembedMustangMustangRankEmbedInfo.class);
  }

  /**
   * Matched/Inferred weak product identity - set only if the global_product_cluster_id is missing
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.math.BigInteger weakGlobalProductClusterId;

  /**
   * @return value or {@code null} for none
   */
  public ShoppingWebentityShoppingAnnotationProductRating getAggregateRating() {
    return aggregateRating;
  }

  /**
   * @param aggregateRating aggregateRating or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setAggregateRating(ShoppingWebentityShoppingAnnotationProductRating aggregateRating) {
    this.aggregateRating = aggregateRating;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getBrandEntityId() {
    return brandEntityId;
  }

  /**
   * @param brandEntityId brandEntityId or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setBrandEntityId(java.math.BigInteger brandEntityId) {
    this.brandEntityId = brandEntityId;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getCatalogId() {
    return catalogId;
  }

  /**
   * @param catalogId catalogId or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setCatalogId(java.math.BigInteger catalogId) {
    this.catalogId = catalogId;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getGlobalProductClusterId() {
    return globalProductClusterId;
  }

  /**
   * @param globalProductClusterId globalProductClusterId or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setGlobalProductClusterId(java.math.BigInteger globalProductClusterId) {
    this.globalProductClusterId = globalProductClusterId;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<ShoppingWebentityShoppingAnnotationProductImage> getImages() {
    return images;
  }

  /**
   * @param images images or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setImages(java.util.List<ShoppingWebentityShoppingAnnotationProductImage> images) {
    this.images = images;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentLocale getLocale() {
    return locale;
  }

  /**
   * @param locale locale or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setLocale(QualityShoppingShoppingAttachmentLocale locale) {
    this.locale = locale;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.util.List<QualityShoppingShoppingAttachmentMokaFacetValue> getMokaFacet() {
    return mokaFacet;
  }

  /**
   * @param mokaFacet mokaFacet or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setMokaFacet(java.util.List<QualityShoppingShoppingAttachmentMokaFacetValue> mokaFacet) {
    this.mokaFacet = mokaFacet;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getNonDisplayableDescription() {
    return nonDisplayableDescription;
  }

  /**
   * @param nonDisplayableDescription nonDisplayableDescription or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setNonDisplayableDescription(java.lang.String nonDisplayableDescription) {
    this.nonDisplayableDescription = nonDisplayableDescription;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.lang.String getNonDisplayableTitle() {
    return nonDisplayableTitle;
  }

  /**
   * @param nonDisplayableTitle nonDisplayableTitle or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setNonDisplayableTitle(java.lang.String nonDisplayableTitle) {
    this.nonDisplayableTitle = nonDisplayableTitle;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentOffer getOffer() {
    return offer;
  }

  /**
   * @param offer offer or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setOffer(QualityShoppingShoppingAttachmentOffer offer) {
    this.offer = offer;
    return this;
  }

  /**
   * Whether an outlink points to the same domain or off-domain. Only added if the relationship is
   * known, and the Offer has ref_type of OUTLINK.
   * @return value or {@code null} for none
   */
  public java.lang.String getOutlinkDomainRelationship() {
    return outlinkDomainRelationship;
  }

  /**
   * Whether an outlink points to the same domain or off-domain. Only added if the relationship is
   * known, and the Offer has ref_type of OUTLINK.
   * @param outlinkDomainRelationship outlinkDomainRelationship or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setOutlinkDomainRelationship(java.lang.String outlinkDomainRelationship) {
    this.outlinkDomainRelationship = outlinkDomainRelationship;
    return this;
  }

  /**
   * Client needs to make decision on which field to use when both non_displayable_title and
   * pblock.final_title are present.
   * @return value or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentPBlock getPblock() {
    return pblock;
  }

  /**
   * Client needs to make decision on which field to use when both non_displayable_title and
   * pblock.final_title are present.
   * @param pblock pblock or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setPblock(QualityShoppingShoppingAttachmentPBlock pblock) {
    this.pblock = pblock;
    return this;
  }

  /**
   * Product level Browseonomy ids from shopping_annotation.product.browseonomy.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.Integer> getProductBrowseonomyIds() {
    return productBrowseonomyIds;
  }

  /**
   * Product level Browseonomy ids from shopping_annotation.product.browseonomy.
   * @param productBrowseonomyIds productBrowseonomyIds or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setProductBrowseonomyIds(java.util.List<java.lang.Integer> productBrowseonomyIds) {
    this.productBrowseonomyIds = productBrowseonomyIds;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getProductClusterMid() {
    return productClusterMid;
  }

  /**
   * @param productClusterMid productClusterMid or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setProductClusterMid(java.math.BigInteger productClusterMid) {
    this.productClusterMid = productClusterMid;
    return this;
  }

  /**
   * Organic product popularity.
   * @return value or {@code null} for none
   */
  public java.lang.Double getProductPopularity() {
    return productPopularity;
  }

  /**
   * Organic product popularity.
   * @param productPopularity productPopularity or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setProductPopularity(java.lang.Double productPopularity) {
    this.productPopularity = productPopularity;
    return this;
  }

  /**
   * Relevance embedding from ShoppingAnnotation.Product
   * @return value or {@code null} for none
   */
  public java.util.List<QualityRankembedMustangMustangRankEmbedInfo> getRelevanceEmbedding() {
    return relevanceEmbedding;
  }

  /**
   * Relevance embedding from ShoppingAnnotation.Product
   * @param relevanceEmbedding relevanceEmbedding or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setRelevanceEmbedding(java.util.List<QualityRankembedMustangMustangRankEmbedInfo> relevanceEmbedding) {
    this.relevanceEmbedding = relevanceEmbedding;
    return this;
  }

  /**
   * Matched/Inferred weak product identity - set only if the global_product_cluster_id is missing
   * @return value or {@code null} for none
   */
  public java.math.BigInteger getWeakGlobalProductClusterId() {
    return weakGlobalProductClusterId;
  }

  /**
   * Matched/Inferred weak product identity - set only if the global_product_cluster_id is missing
   * @param weakGlobalProductClusterId weakGlobalProductClusterId or {@code null} for none
   */
  public QualityShoppingShoppingAttachmentProduct setWeakGlobalProductClusterId(java.math.BigInteger weakGlobalProductClusterId) {
    this.weakGlobalProductClusterId = weakGlobalProductClusterId;
    return this;
  }

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

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

}
