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

/**
 * This message is used to store information about Inline Playback in the VideoWebAttachment portion
 * of the websearch index. LINT.IfChange
 *
 * <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 VideoCrawlVideoInlinePlaybackMetadata extends com.google.api.client.json.GenericJson {

  /**
   * Timestamp (measured in seconds since epoch) when a video may not be used for inline playback in
   * the interest feed.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long expirationTimestampSec;

  /**
   * Publisher's Google Analytics Id to which we can report view metrics.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String googleAnalyticsId;

  /**
   * All two-letter codes for countries where this video may NOT be played.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> playbackCountryBlacklist;

  /**
   * All two-letter codes for countries where this video may be played. If empty, then all countries
   * not on the blacklist are allowed for playback.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> playbackCountryWhitelist;

  /**
   * Set of transcodes which are available for the video.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.Integer> transcodeItags;

  /**
   * VAST tag for ads to be played along with this video. Currently, we only support VAST tags from
   * Doubleclick and FreeWheel.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String vastTag;

  /**
   * Identifier video is known by in the video infrastructure. The format given here is the
   * YoutubeId format (base-64) used in Venom; for Viper/Bandaid/ StreamingURLService, convert to
   * ContentIdHex.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String videoId;

  /**
   * Set if the video is hosted on an external CDN, in which case it is not to be transcoded and
   * hosted at Google for the Interest Feed.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String videoUrlOnExternalCdn;

  /**
   * Timestamp (measured in seconds since epoch) when a video may not be used for inline playback in
   * the interest feed.
   * @return value or {@code null} for none
   */
  public java.lang.Long getExpirationTimestampSec() {
    return expirationTimestampSec;
  }

  /**
   * Timestamp (measured in seconds since epoch) when a video may not be used for inline playback in
   * the interest feed.
   * @param expirationTimestampSec expirationTimestampSec or {@code null} for none
   */
  public VideoCrawlVideoInlinePlaybackMetadata setExpirationTimestampSec(java.lang.Long expirationTimestampSec) {
    this.expirationTimestampSec = expirationTimestampSec;
    return this;
  }

  /**
   * Publisher's Google Analytics Id to which we can report view metrics.
   * @return value or {@code null} for none
   */
  public java.lang.String getGoogleAnalyticsId() {
    return googleAnalyticsId;
  }

  /**
   * Publisher's Google Analytics Id to which we can report view metrics.
   * @param googleAnalyticsId googleAnalyticsId or {@code null} for none
   */
  public VideoCrawlVideoInlinePlaybackMetadata setGoogleAnalyticsId(java.lang.String googleAnalyticsId) {
    this.googleAnalyticsId = googleAnalyticsId;
    return this;
  }

  /**
   * All two-letter codes for countries where this video may NOT be played.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getPlaybackCountryBlacklist() {
    return playbackCountryBlacklist;
  }

  /**
   * All two-letter codes for countries where this video may NOT be played.
   * @param playbackCountryBlacklist playbackCountryBlacklist or {@code null} for none
   */
  public VideoCrawlVideoInlinePlaybackMetadata setPlaybackCountryBlacklist(java.util.List<java.lang.String> playbackCountryBlacklist) {
    this.playbackCountryBlacklist = playbackCountryBlacklist;
    return this;
  }

  /**
   * All two-letter codes for countries where this video may be played. If empty, then all countries
   * not on the blacklist are allowed for playback.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getPlaybackCountryWhitelist() {
    return playbackCountryWhitelist;
  }

  /**
   * All two-letter codes for countries where this video may be played. If empty, then all countries
   * not on the blacklist are allowed for playback.
   * @param playbackCountryWhitelist playbackCountryWhitelist or {@code null} for none
   */
  public VideoCrawlVideoInlinePlaybackMetadata setPlaybackCountryWhitelist(java.util.List<java.lang.String> playbackCountryWhitelist) {
    this.playbackCountryWhitelist = playbackCountryWhitelist;
    return this;
  }

  /**
   * Set of transcodes which are available for the video.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.Integer> getTranscodeItags() {
    return transcodeItags;
  }

  /**
   * Set of transcodes which are available for the video.
   * @param transcodeItags transcodeItags or {@code null} for none
   */
  public VideoCrawlVideoInlinePlaybackMetadata setTranscodeItags(java.util.List<java.lang.Integer> transcodeItags) {
    this.transcodeItags = transcodeItags;
    return this;
  }

  /**
   * VAST tag for ads to be played along with this video. Currently, we only support VAST tags from
   * Doubleclick and FreeWheel.
   * @return value or {@code null} for none
   */
  public java.lang.String getVastTag() {
    return vastTag;
  }

  /**
   * VAST tag for ads to be played along with this video. Currently, we only support VAST tags from
   * Doubleclick and FreeWheel.
   * @param vastTag vastTag or {@code null} for none
   */
  public VideoCrawlVideoInlinePlaybackMetadata setVastTag(java.lang.String vastTag) {
    this.vastTag = vastTag;
    return this;
  }

  /**
   * Identifier video is known by in the video infrastructure. The format given here is the
   * YoutubeId format (base-64) used in Venom; for Viper/Bandaid/ StreamingURLService, convert to
   * ContentIdHex.
   * @return value or {@code null} for none
   */
  public java.lang.String getVideoId() {
    return videoId;
  }

  /**
   * Identifier video is known by in the video infrastructure. The format given here is the
   * YoutubeId format (base-64) used in Venom; for Viper/Bandaid/ StreamingURLService, convert to
   * ContentIdHex.
   * @param videoId videoId or {@code null} for none
   */
  public VideoCrawlVideoInlinePlaybackMetadata setVideoId(java.lang.String videoId) {
    this.videoId = videoId;
    return this;
  }

  /**
   * Set if the video is hosted on an external CDN, in which case it is not to be transcoded and
   * hosted at Google for the Interest Feed.
   * @return value or {@code null} for none
   */
  public java.lang.String getVideoUrlOnExternalCdn() {
    return videoUrlOnExternalCdn;
  }

  /**
   * Set if the video is hosted on an external CDN, in which case it is not to be transcoded and
   * hosted at Google for the Interest Feed.
   * @param videoUrlOnExternalCdn videoUrlOnExternalCdn or {@code null} for none
   */
  public VideoCrawlVideoInlinePlaybackMetadata setVideoUrlOnExternalCdn(java.lang.String videoUrlOnExternalCdn) {
    this.videoUrlOnExternalCdn = videoUrlOnExternalCdn;
    return this;
  }

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

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

}
