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

/**
 * Next ID: 23
 *
 * <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 VideoContentSearchVideoAnchor extends com.google.api.client.json.GenericJson {

  /**
   * The score indicating anchor confidence.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float anchorScore;

  /**
   * Specifies the type of the anchor.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String anchorType;

  /**
   * Context text from ASR of long duration, used for longT5 models.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String contextText;

  /**
   * When set, this is the link that should be used when clicking on a video anchor. This should
   * jump to the given time in the video.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String destinationUrl;

  /**
   * The duration of the video anchor in milliseconds.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long duration;

  /**
   * The score indicating the usefulness of the entity identified by 'mid'.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float entityScore;

  /**
   * If is_filtered is true, this field illustrates the reasons.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> filterReason;

  /**
   * If true, the anchor is filtered and not served online.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isFiltered;

  /**
   * Convenience field that consolidates signals for whether this label is safe.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isSafe;

  /**
   * whether this label is bad by go/scuti
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isScutiBad;

  /**
   * The text label of the video anchor.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String label;

  /**
   * The score indicating label confidence.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float labelScore;

  /**
   * The mid of the video anchor.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String mid;

  /**
   * Specifies named enitities the label has.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<VideoContentSearchNamedEntity> namedEntity;

  static {
    // hack to force ProGuard to consider VideoContentSearchNamedEntity 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(VideoContentSearchNamedEntity.class);
  }

  /**
   * The precision for which the anchor should trigger. For example, if the desired precision is
   * 95%, anchors with precision_score < 0.95 should be removed.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Float precisionScore;

  /**
   * Additional scoring info used for debugging.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VideoContentSearchVideoAnchorScoreInfo scoreInfo;

  /**
   * Visual tokens for the anchor. Eg. starbust feature vectors for several frames concatenated
   * together.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VideoContentSearchVisualFeatures starburstFeatures;

  /**
   * Data about the thumbnail to display for this anchor.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private VideoContentSearchAnchorThumbnail thumbnail;

  /**
   * The url for a frame to display for this anchor.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String thumbnailUrl;

  /**
   * The time stamp of the video anchor in milliseconds.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key @com.google.api.client.json.JsonString
  private java.lang.Long time;

  /**
   * Timing info for each token in the anchor label.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<VideoContentSearchTokenTimingInfo> tokenTimingInfo;

  static {
    // hack to force ProGuard to consider VideoContentSearchTokenTimingInfo 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(VideoContentSearchTokenTimingInfo.class);
  }

  /**
   * The score indicating anchor confidence.
   * @return value or {@code null} for none
   */
  public java.lang.Float getAnchorScore() {
    return anchorScore;
  }

  /**
   * The score indicating anchor confidence.
   * @param anchorScore anchorScore or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setAnchorScore(java.lang.Float anchorScore) {
    this.anchorScore = anchorScore;
    return this;
  }

  /**
   * Specifies the type of the anchor.
   * @return value or {@code null} for none
   */
  public java.lang.String getAnchorType() {
    return anchorType;
  }

  /**
   * Specifies the type of the anchor.
   * @param anchorType anchorType or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setAnchorType(java.lang.String anchorType) {
    this.anchorType = anchorType;
    return this;
  }

  /**
   * Context text from ASR of long duration, used for longT5 models.
   * @return value or {@code null} for none
   */
  public java.lang.String getContextText() {
    return contextText;
  }

  /**
   * Context text from ASR of long duration, used for longT5 models.
   * @param contextText contextText or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setContextText(java.lang.String contextText) {
    this.contextText = contextText;
    return this;
  }

  /**
   * When set, this is the link that should be used when clicking on a video anchor. This should
   * jump to the given time in the video.
   * @return value or {@code null} for none
   */
  public java.lang.String getDestinationUrl() {
    return destinationUrl;
  }

  /**
   * When set, this is the link that should be used when clicking on a video anchor. This should
   * jump to the given time in the video.
   * @param destinationUrl destinationUrl or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setDestinationUrl(java.lang.String destinationUrl) {
    this.destinationUrl = destinationUrl;
    return this;
  }

  /**
   * The duration of the video anchor in milliseconds.
   * @return value or {@code null} for none
   */
  public java.lang.Long getDuration() {
    return duration;
  }

  /**
   * The duration of the video anchor in milliseconds.
   * @param duration duration or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setDuration(java.lang.Long duration) {
    this.duration = duration;
    return this;
  }

  /**
   * The score indicating the usefulness of the entity identified by 'mid'.
   * @return value or {@code null} for none
   */
  public java.lang.Float getEntityScore() {
    return entityScore;
  }

  /**
   * The score indicating the usefulness of the entity identified by 'mid'.
   * @param entityScore entityScore or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setEntityScore(java.lang.Float entityScore) {
    this.entityScore = entityScore;
    return this;
  }

  /**
   * If is_filtered is true, this field illustrates the reasons.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getFilterReason() {
    return filterReason;
  }

  /**
   * If is_filtered is true, this field illustrates the reasons.
   * @param filterReason filterReason or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setFilterReason(java.util.List<java.lang.String> filterReason) {
    this.filterReason = filterReason;
    return this;
  }

  /**
   * If true, the anchor is filtered and not served online.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsFiltered() {
    return isFiltered;
  }

  /**
   * If true, the anchor is filtered and not served online.
   * @param isFiltered isFiltered or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setIsFiltered(java.lang.Boolean isFiltered) {
    this.isFiltered = isFiltered;
    return this;
  }

  /**
   * Convenience field that consolidates signals for whether this label is safe.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsSafe() {
    return isSafe;
  }

  /**
   * Convenience field that consolidates signals for whether this label is safe.
   * @param isSafe isSafe or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setIsSafe(java.lang.Boolean isSafe) {
    this.isSafe = isSafe;
    return this;
  }

  /**
   * whether this label is bad by go/scuti
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsScutiBad() {
    return isScutiBad;
  }

  /**
   * whether this label is bad by go/scuti
   * @param isScutiBad isScutiBad or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setIsScutiBad(java.lang.Boolean isScutiBad) {
    this.isScutiBad = isScutiBad;
    return this;
  }

  /**
   * The text label of the video anchor.
   * @return value or {@code null} for none
   */
  public java.lang.String getLabel() {
    return label;
  }

  /**
   * The text label of the video anchor.
   * @param label label or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setLabel(java.lang.String label) {
    this.label = label;
    return this;
  }

  /**
   * The score indicating label confidence.
   * @return value or {@code null} for none
   */
  public java.lang.Float getLabelScore() {
    return labelScore;
  }

  /**
   * The score indicating label confidence.
   * @param labelScore labelScore or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setLabelScore(java.lang.Float labelScore) {
    this.labelScore = labelScore;
    return this;
  }

  /**
   * The mid of the video anchor.
   * @return value or {@code null} for none
   */
  public java.lang.String getMid() {
    return mid;
  }

  /**
   * The mid of the video anchor.
   * @param mid mid or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setMid(java.lang.String mid) {
    this.mid = mid;
    return this;
  }

  /**
   * Specifies named enitities the label has.
   * @return value or {@code null} for none
   */
  public java.util.List<VideoContentSearchNamedEntity> getNamedEntity() {
    return namedEntity;
  }

  /**
   * Specifies named enitities the label has.
   * @param namedEntity namedEntity or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setNamedEntity(java.util.List<VideoContentSearchNamedEntity> namedEntity) {
    this.namedEntity = namedEntity;
    return this;
  }

  /**
   * The precision for which the anchor should trigger. For example, if the desired precision is
   * 95%, anchors with precision_score < 0.95 should be removed.
   * @return value or {@code null} for none
   */
  public java.lang.Float getPrecisionScore() {
    return precisionScore;
  }

  /**
   * The precision for which the anchor should trigger. For example, if the desired precision is
   * 95%, anchors with precision_score < 0.95 should be removed.
   * @param precisionScore precisionScore or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setPrecisionScore(java.lang.Float precisionScore) {
    this.precisionScore = precisionScore;
    return this;
  }

  /**
   * Additional scoring info used for debugging.
   * @return value or {@code null} for none
   */
  public VideoContentSearchVideoAnchorScoreInfo getScoreInfo() {
    return scoreInfo;
  }

  /**
   * Additional scoring info used for debugging.
   * @param scoreInfo scoreInfo or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setScoreInfo(VideoContentSearchVideoAnchorScoreInfo scoreInfo) {
    this.scoreInfo = scoreInfo;
    return this;
  }

  /**
   * Visual tokens for the anchor. Eg. starbust feature vectors for several frames concatenated
   * together.
   * @return value or {@code null} for none
   */
  public VideoContentSearchVisualFeatures getStarburstFeatures() {
    return starburstFeatures;
  }

  /**
   * Visual tokens for the anchor. Eg. starbust feature vectors for several frames concatenated
   * together.
   * @param starburstFeatures starburstFeatures or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setStarburstFeatures(VideoContentSearchVisualFeatures starburstFeatures) {
    this.starburstFeatures = starburstFeatures;
    return this;
  }

  /**
   * Data about the thumbnail to display for this anchor.
   * @return value or {@code null} for none
   */
  public VideoContentSearchAnchorThumbnail getThumbnail() {
    return thumbnail;
  }

  /**
   * Data about the thumbnail to display for this anchor.
   * @param thumbnail thumbnail or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setThumbnail(VideoContentSearchAnchorThumbnail thumbnail) {
    this.thumbnail = thumbnail;
    return this;
  }

  /**
   * The url for a frame to display for this anchor.
   * @return value or {@code null} for none
   */
  public java.lang.String getThumbnailUrl() {
    return thumbnailUrl;
  }

  /**
   * The url for a frame to display for this anchor.
   * @param thumbnailUrl thumbnailUrl or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setThumbnailUrl(java.lang.String thumbnailUrl) {
    this.thumbnailUrl = thumbnailUrl;
    return this;
  }

  /**
   * The time stamp of the video anchor in milliseconds.
   * @return value or {@code null} for none
   */
  public java.lang.Long getTime() {
    return time;
  }

  /**
   * The time stamp of the video anchor in milliseconds.
   * @param time time or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setTime(java.lang.Long time) {
    this.time = time;
    return this;
  }

  /**
   * Timing info for each token in the anchor label.
   * @return value or {@code null} for none
   */
  public java.util.List<VideoContentSearchTokenTimingInfo> getTokenTimingInfo() {
    return tokenTimingInfo;
  }

  /**
   * Timing info for each token in the anchor label.
   * @param tokenTimingInfo tokenTimingInfo or {@code null} for none
   */
  public VideoContentSearchVideoAnchor setTokenTimingInfo(java.util.List<VideoContentSearchTokenTimingInfo> tokenTimingInfo) {
    this.tokenTimingInfo = tokenTimingInfo;
    return this;
  }

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

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

}
