package io.delphi.qa.auto.awsmfrw.models.aws.lm;

import groovy.transform.ToString;
import io.delphi.qa.auto.awsmfrw.common_baby.IsaCommonMethods;
import io.delphi.qa.auto.awsmfrw.models.aws.s3.complete_criteria.CompleteCriteria;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.joda.time.DateTime;

import java.util.Set;

@Getter
@ToString
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class WpSlzUnitOfWork implements IsaCommonMethods {
  private String dsp;
  private String licensor;
  private int licensorId;
  private String version;
  private String reportName;
  @Deprecated private int requiredContextAmount;
  private DateTime reportDate;
  private Integer reportId;
  private Set<CompleteCriteria> completeCriteriaSet;

  public WpSlzUnitOfWork withLicensorId(int xLicensorId) {
    this.licensorId = xLicensorId;
    return this;
  }

  public WpSlzUnitOfWork withReportId(Integer xReportId) {
    this.reportId = xReportId;
    return this;
  }

  public WpSlzUnitOfWork withReportName(String xReportName) {
    this.reportName = xReportName;
    return this;
  }

  public WpSlzUnitOfWork withVersion(String xVersion) {
    this.version = xVersion;
    return this;
  }

  public WpSlzUnitOfWork withLicensor(String xLicensor) {
    this.licensor = xLicensor;
    return this;
  }

  public WpSlzUnitOfWork withDsp(String xDsp) {
    this.dsp = xDsp;
    return this;
  }

  public WpSlzUnitOfWork withReportDate(DateTime xReportDate) {
    this.reportDate = xReportDate;
    return this;
  }

  public String uowCode;

  @Deprecated
  public WpSlzUnitOfWork withRequiredContextAmount(int xContentAmount) {
    this.requiredContextAmount = xContentAmount;
    return this;
  }

  public WpSlzUnitOfWork withCompleteCriteriaSet(Set<CompleteCriteria> xCompleteCriteria) {
    this.completeCriteriaSet = xCompleteCriteria;
    return this;
  }

  public String getUowCode() {
    return String.format(
        "%s-%s-%s-%s-%s",
        this.dsp,
        IsaCommonMethods.printDateTimeText(this.getReportDate(), "yyyyMMdd"),
        this.licensor,
        this.reportName,
        this.version);
  }
}
