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

import com.google.gson.annotations.SerializedName;
import io.delphi.qa.auto.awsmfrw.common_baby.IsaCommonMethods;
import lombok.*;
import org.aeonbits.owner.util.Collections;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;

import java.util.List;
import java.util.UUID;

@Getter
@ToString
@EqualsAndHashCode
@AllArgsConstructor
@Builder
public class MlCwEventRegular {

  public MlCwEventRegular() {
    this.account = "{{account-id}}";
    this.detail = new Detail();
    this.detailType = "Scheduled Event";
    this.optionalConfig = new OptionalConfig();
    this.id = UUID.randomUUID().toString();
    this.region = IsaCommonMethods.getAwsProfileRegion();
    this.resources = Collections.list("arn:aws:events:us-east-1:123456789012:rule/ExampleRule");
    this.source = "aws.events";
    this.time = "yyyy-MM-dd'T'HH:mm:ss";
  }

  private String account;
  private Detail detail;

  @SerializedName("detail-type")
  private String detailType;

  @SerializedName("optional_config")
  private OptionalConfig optionalConfig;

  private String id;
  private String region;

  private List<String> resources;

  private String source;
  private String time;

  public MlCwEventRegular withOptionalConfig(OptionalConfig xOptionalConfig) {
    this.optionalConfig = xOptionalConfig;
    return this;
  }

  public MlCwEventRegular withTime(DateTime xTime) {
    this.time = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss").print(xTime) + "Z";
    return this;
  }
}
