package tv.pluto.mongo.entities.transcodejobs;

import com.google.gson.annotations.JsonAdapter;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Date;
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.utils.json.DateAdapter;
import tv.pluto.mongo.utils.json.LocalDateTimeAdapter;

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

  @JsonAdapter(DateAdapter.class)
  private Date createdAt;

  @JsonAdapter(LocalDateTimeAdapter.class)
  private LocalDateTime updatedAt;

  private String status = "";
  private Integer progress;
  private String externalID = "";
  private String transcodeMode = "";
  private String transcoderName = "";
  private String transcoderVersion = "";

  @BsonRepresentation(BsonType.OBJECT_ID)
  private String item = "";

  private String model = "";
  private String environment = "";
  private String dbType = "";
  private String error;
  private List<Transcode> transcodes;
  private String libVersion = "";
  private EncryptionParams encryptionParams;
  private List<Caption> captions = Collections.emptyList();

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

  public String getExternalID() {
    return externalID == null ? "" : externalID;
  }

  public String getTranscodeMode() {
    return transcodeMode == null ? "" : transcodeMode;
  }

  public String getTranscoderVersion() {
    return transcoderVersion == null ? "" : transcoderVersion;
  }

  public String getLibVersion() {
    return libVersion == null ? "" : libVersion;
  }

  public String getTranscoderName() {
    return transcoderName == null ? "" : transcoderName;
  }

  public String getModel() {
    return model == null ? "" : model;
  }

  public String getEnvironment() {
    return environment == null ? "" : environment;
  }

  public String getDbType() {
    return dbType == null ? "" : dbType;
  }

  public String getError() {
    return error == null ? "" : error;
  }

  public String getItem() {
    return item == null ? "" : item;
  }

  public Integer getProgress() {
    return progress == null ? 0 : progress;
  }
}
