/*
 * 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.displayvideo.v1.model;

/**
 * Assigned audience group targeting option details. This will be populated in the details field of
 * an AssignedTargetingOption when targeting_type is `TARGETING_TYPE_AUDIENCE_GROUP`. The relation
 * between each group is UNION, except for excluded_first_and_third_party_audience_group and
 * excluded_google_audience_group, of which COMPLEMENT is used as an INTERSECTION with other groups.
 *
 * <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 Display & Video 360 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 AudienceGroupAssignedTargetingOptionDetails extends com.google.api.client.json.GenericJson {

  /**
   * The first and third party audience ids and recencies of the excluded first and third party
   * audience group. Used for negative targeting. The COMPLEMENT of the UNION of this group and
   * other excluded audience groups is used as an INTERSECTION to any positive audience targeting.
   * All items are logically ‘OR’ of each other.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private FirstAndThirdPartyAudienceGroup excludedFirstAndThirdPartyAudienceGroup;

  /**
   * The Google audience ids of the excluded Google audience group. Used for negative targeting. The
   * COMPLEMENT of the UNION of this group and other excluded audience groups is used as an
   * INTERSECTION to any positive audience targeting. Only contains Affinity, In-market and
   * Installed-apps type Google audiences. All items are logically ‘OR’ of each other.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAudienceGroup excludedGoogleAudienceGroup;

  /**
   * The combined audience ids of the included combined audience group. Contains combined audience
   * ids only.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private CombinedAudienceGroup includedCombinedAudienceGroup;

  /**
   * The custom list ids of the included custom list group. Contains custom list ids only.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private CustomListGroup includedCustomListGroup;

  /**
   * The first and third party audience ids and recencies of included first and third party audience
   * groups. Each first and third party audience group contains first and third party audience ids
   * only. The relation between each first and third party audience group is INTERSECTION, and the
   * result is UNION'ed with other audience groups. Repeated groups with same settings will be
   * ignored.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<FirstAndThirdPartyAudienceGroup> includedFirstAndThirdPartyAudienceGroups;

  /**
   * The Google audience ids of the included Google audience group. Contains Google audience ids
   * only.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleAudienceGroup includedGoogleAudienceGroup;

  /**
   * The first and third party audience ids and recencies of the excluded first and third party
   * audience group. Used for negative targeting. The COMPLEMENT of the UNION of this group and
   * other excluded audience groups is used as an INTERSECTION to any positive audience targeting.
   * All items are logically ‘OR’ of each other.
   * @return value or {@code null} for none
   */
  public FirstAndThirdPartyAudienceGroup getExcludedFirstAndThirdPartyAudienceGroup() {
    return excludedFirstAndThirdPartyAudienceGroup;
  }

  /**
   * The first and third party audience ids and recencies of the excluded first and third party
   * audience group. Used for negative targeting. The COMPLEMENT of the UNION of this group and
   * other excluded audience groups is used as an INTERSECTION to any positive audience targeting.
   * All items are logically ‘OR’ of each other.
   * @param excludedFirstAndThirdPartyAudienceGroup excludedFirstAndThirdPartyAudienceGroup or {@code null} for none
   */
  public AudienceGroupAssignedTargetingOptionDetails setExcludedFirstAndThirdPartyAudienceGroup(FirstAndThirdPartyAudienceGroup excludedFirstAndThirdPartyAudienceGroup) {
    this.excludedFirstAndThirdPartyAudienceGroup = excludedFirstAndThirdPartyAudienceGroup;
    return this;
  }

  /**
   * The Google audience ids of the excluded Google audience group. Used for negative targeting. The
   * COMPLEMENT of the UNION of this group and other excluded audience groups is used as an
   * INTERSECTION to any positive audience targeting. Only contains Affinity, In-market and
   * Installed-apps type Google audiences. All items are logically ‘OR’ of each other.
   * @return value or {@code null} for none
   */
  public GoogleAudienceGroup getExcludedGoogleAudienceGroup() {
    return excludedGoogleAudienceGroup;
  }

  /**
   * The Google audience ids of the excluded Google audience group. Used for negative targeting. The
   * COMPLEMENT of the UNION of this group and other excluded audience groups is used as an
   * INTERSECTION to any positive audience targeting. Only contains Affinity, In-market and
   * Installed-apps type Google audiences. All items are logically ‘OR’ of each other.
   * @param excludedGoogleAudienceGroup excludedGoogleAudienceGroup or {@code null} for none
   */
  public AudienceGroupAssignedTargetingOptionDetails setExcludedGoogleAudienceGroup(GoogleAudienceGroup excludedGoogleAudienceGroup) {
    this.excludedGoogleAudienceGroup = excludedGoogleAudienceGroup;
    return this;
  }

  /**
   * The combined audience ids of the included combined audience group. Contains combined audience
   * ids only.
   * @return value or {@code null} for none
   */
  public CombinedAudienceGroup getIncludedCombinedAudienceGroup() {
    return includedCombinedAudienceGroup;
  }

  /**
   * The combined audience ids of the included combined audience group. Contains combined audience
   * ids only.
   * @param includedCombinedAudienceGroup includedCombinedAudienceGroup or {@code null} for none
   */
  public AudienceGroupAssignedTargetingOptionDetails setIncludedCombinedAudienceGroup(CombinedAudienceGroup includedCombinedAudienceGroup) {
    this.includedCombinedAudienceGroup = includedCombinedAudienceGroup;
    return this;
  }

  /**
   * The custom list ids of the included custom list group. Contains custom list ids only.
   * @return value or {@code null} for none
   */
  public CustomListGroup getIncludedCustomListGroup() {
    return includedCustomListGroup;
  }

  /**
   * The custom list ids of the included custom list group. Contains custom list ids only.
   * @param includedCustomListGroup includedCustomListGroup or {@code null} for none
   */
  public AudienceGroupAssignedTargetingOptionDetails setIncludedCustomListGroup(CustomListGroup includedCustomListGroup) {
    this.includedCustomListGroup = includedCustomListGroup;
    return this;
  }

  /**
   * The first and third party audience ids and recencies of included first and third party audience
   * groups. Each first and third party audience group contains first and third party audience ids
   * only. The relation between each first and third party audience group is INTERSECTION, and the
   * result is UNION'ed with other audience groups. Repeated groups with same settings will be
   * ignored.
   * @return value or {@code null} for none
   */
  public java.util.List<FirstAndThirdPartyAudienceGroup> getIncludedFirstAndThirdPartyAudienceGroups() {
    return includedFirstAndThirdPartyAudienceGroups;
  }

  /**
   * The first and third party audience ids and recencies of included first and third party audience
   * groups. Each first and third party audience group contains first and third party audience ids
   * only. The relation between each first and third party audience group is INTERSECTION, and the
   * result is UNION'ed with other audience groups. Repeated groups with same settings will be
   * ignored.
   * @param includedFirstAndThirdPartyAudienceGroups includedFirstAndThirdPartyAudienceGroups or {@code null} for none
   */
  public AudienceGroupAssignedTargetingOptionDetails setIncludedFirstAndThirdPartyAudienceGroups(java.util.List<FirstAndThirdPartyAudienceGroup> includedFirstAndThirdPartyAudienceGroups) {
    this.includedFirstAndThirdPartyAudienceGroups = includedFirstAndThirdPartyAudienceGroups;
    return this;
  }

  /**
   * The Google audience ids of the included Google audience group. Contains Google audience ids
   * only.
   * @return value or {@code null} for none
   */
  public GoogleAudienceGroup getIncludedGoogleAudienceGroup() {
    return includedGoogleAudienceGroup;
  }

  /**
   * The Google audience ids of the included Google audience group. Contains Google audience ids
   * only.
   * @param includedGoogleAudienceGroup includedGoogleAudienceGroup or {@code null} for none
   */
  public AudienceGroupAssignedTargetingOptionDetails setIncludedGoogleAudienceGroup(GoogleAudienceGroup includedGoogleAudienceGroup) {
    this.includedGoogleAudienceGroup = includedGoogleAudienceGroup;
    return this;
  }

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

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

}
