/*
 * (c) 2020 Pluto Inc.
 */
package tv.pluto.mongo.entities.sequencer;

import java.util.Collections;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.bson.BsonType;
import org.bson.codecs.pojo.annotations.BsonRepresentation;
import tv.pluto.mongo.entities.common.Thumbnail;
import tv.pluto.mongo.utils.json.SkipDeserialisation;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Clip {
  @BsonRepresentation(BsonType.OBJECT_ID)
  private String id;

  private String name = "";
  @SkipDeserialisation private Partner partner = new Partner();
  private String description = "";
  @SkipDeserialisation private Author author = new Author();
  private List<Thumbnail> thumbnails = Collections.emptyList();
  private String partnerCode = "";
  @SkipDeserialisation private List<Fragment> fragments = Collections.emptyList();
  private Double inPoint;
  private Double outPoint;
  private String language = "";
  private String ratingReason = "";
  private String genre = "";
  private String subGenre = "";
  private String summary = "";
  private String category = "";
  @SkipDeserialisation private List<ClipSource> sources = Collections.emptyList();
  private String rating = "";
  private Double duration;
  @SkipDeserialisation private Nielsen nielsen = new Nielsen();
  @SkipDeserialisation private HydratedComScore comScore;
  private String url = "";
  private String contentStatus = "";
  private Boolean promotional;
  private List<Integer> breakpoints = Collections.emptyList();

  public Double getInPoint() {
    return inPoint == null ? 0 : inPoint;
  }

  public Double getOutPoint() {
    return outPoint == null ? 0 : outPoint;
  }

  public Double getDuration() {
    return duration == null ? 0 : duration;
  }

  public String getName() {
    return name == null ? "" : name;
  }

  public String getDescription() {
    return description == null ? "" : description;
  }

  public String getPartnerCode() {
    return partnerCode == null ? "" : partnerCode;
  }

  public String getLanguage() {
    return language == null ? "" : language;
  }

  public String getRatingReason() {
    return ratingReason == null ? "" : ratingReason;
  }

  public String getGenre() {
    return genre == null ? "" : genre;
  }

  public String getSubGenre() {
    return subGenre == null ? "" : subGenre;
  }

  public String getSummary() {
    return summary == null ? "" : summary;
  }

  public String getCategory() {
    return category == null ? "" : category;
  }

  public String getRating() {
    return rating == null ? "" : rating;
  }

  public String getUrl() {
    return url == null ? "" : url;
  }

  public String getContentStatus() {
    return contentStatus == null ? "" : contentStatus;
  }

  public boolean isPromotional() {
    return promotional != null && promotional;
  }
}
