package tv.pluto.mongo.entities.timelines.populated_timelines;

import com.google.gson.annotations.JsonAdapter;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import lombok.Data;
import org.bson.BsonType;
import org.bson.codecs.pojo.annotations.BsonRepresentation;
import tv.pluto.mongo.entities.common.AvailabilityWindows;
import tv.pluto.mongo.entities.common.NextTimeline;
import tv.pluto.mongo.utils.json.DateAdapter;

@Data
public class Episode {
  @BsonRepresentation(BsonType.OBJECT_ID)
  private String id;

  private String name = "";
  private Integer allotment;
  private Integer duration;
  private Boolean published;
  private Boolean is_feed;
  private String status = "";
  private Boolean flagged;
  private Series series;
  private Integer number;
  private Integer season;
  private Integer adPodsDuration;
  private Boolean featured;

  @JsonAdapter(DateAdapter.class)
  private Date firstAired;

  private List<String> regionFilter = Collections.emptyList();
  private String activeRegion = ""; // not in schema
  private String rating = "";

  @JsonAdapter(DateAdapter.class)
  private Date lastAired;

  private NextTimeline nextTimeline = new NextTimeline();
  private AvailabilityWindows availabilityWindows = new AvailabilityWindows(); // not in schema

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

  public Integer getAllotment() {
    return allotment == null ? 0 : allotment;
  }

  public Boolean getPublished() {
    return published != null && published;
  }

  public Boolean isFeed() {
    return is_feed != null && is_feed;
  }

  public String getStatus() {
    return status == null ? "" : status;
  }

  public Boolean getFlagged() {
    return flagged != null && flagged;
  }

  public Integer getNumber() {
    return number == null ? 0 : number;
  }

  public Integer getSeason() {
    return season == null ? 0 : season;
  }

  public Integer getAdPodsDuration() {
    return adPodsDuration == null ? 0 : adPodsDuration;
  }

  public Boolean getFeatured() {
    return featured != null && featured;
  }

  public String getActiveRegion() {
    return activeRegion == null ? "" : activeRegion;
  }

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