/*
 * Avi avi_global_spec Object API
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * OpenAPI spec version: 20.1.1
 * Contact: [email protected]
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */

package com.vmware.avi.sdk.model;

import java.util.Objects;
import java.util.Arrays;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.vmware.avi.sdk.model.AwsEncryption;
import com.vmware.avi.sdk.model.AwsZoneConfig;
import io.swagger.v3.oas.annotations.media.Schema;
import java.util.ArrayList;
import java.util.List;
/**
 * AwsConfiguration
 */

@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaClientCodegen", date = "2020-03-12T12:27:26.755+05:30[Asia/Kolkata]")
public class AwsConfiguration {
  @JsonProperty("access_key_id")
  private String accessKeyId = null;

  @JsonProperty("asg_poll_interval")
  private Integer asgPollInterval = 600;

  @JsonProperty("ebs_encryption")
  private AwsEncryption ebsEncryption = null;

  @JsonProperty("free_elasticips")
  private Boolean freeElasticips = true;

  @JsonProperty("iam_assume_role")
  private String iamAssumeRole = null;

  @JsonProperty("publish_vip_to_public_zone")
  private Boolean publishVipToPublicZone = null;

  @JsonProperty("region")
  private String region = "us-west-1";

  @JsonProperty("route53_integration")
  private Boolean route53Integration = null;

  @JsonProperty("s3_encryption")
  private AwsEncryption s3Encryption = null;

  @JsonProperty("secret_access_key")
  private String secretAccessKey = null;

  @JsonProperty("sqs_encryption")
  private AwsEncryption sqsEncryption = null;

  @JsonProperty("ttl")
  private Integer ttl = 60;

  @JsonProperty("use_iam_roles")
  private Boolean useIamRoles = null;

  @JsonProperty("use_sns_sqs")
  private Boolean useSnsSqs = null;

  @JsonProperty("vpc")
  private String vpc = null;

  @JsonProperty("vpc_id")
  private String vpcId = null;

  @JsonProperty("wildcard_access")
  private Boolean wildcardAccess = null;

  @JsonProperty("zones")
  private List<AwsZoneConfig> zones = null;

  public AwsConfiguration accessKeyId(String accessKeyId) {
    this.accessKeyId = accessKeyId;
    return this;
  }

   /**
   * AWS access key ID.
   * @return accessKeyId
  **/
  @Schema(description = "AWS access key ID.")
  public String getAccessKeyId() {
    return accessKeyId;
  }

  public void setAccessKeyId(String accessKeyId) {
    this.accessKeyId = accessKeyId;
  }

  public AwsConfiguration asgPollInterval(Integer asgPollInterval) {
    this.asgPollInterval = asgPollInterval;
    return this;
  }

   /**
   * Time interval between periodic polling of all Auto Scaling Groups. Allowed values are 60-1800. Field introduced in 17.1.3.
   * @return asgPollInterval
  **/
  @Schema(description = "Time interval between periodic polling of all Auto Scaling Groups. Allowed values are 60-1800. Field introduced in 17.1.3.")
  public Integer getAsgPollInterval() {
    return asgPollInterval;
  }

  public void setAsgPollInterval(Integer asgPollInterval) {
    this.asgPollInterval = asgPollInterval;
  }

  public AwsConfiguration ebsEncryption(AwsEncryption ebsEncryption) {
    this.ebsEncryption = ebsEncryption;
    return this;
  }

   /**
   * Get ebsEncryption
   * @return ebsEncryption
  **/
  @Schema(description = "")
  public AwsEncryption getEbsEncryption() {
    return ebsEncryption;
  }

  public void setEbsEncryption(AwsEncryption ebsEncryption) {
    this.ebsEncryption = ebsEncryption;
  }

  public AwsConfiguration freeElasticips(Boolean freeElasticips) {
    this.freeElasticips = freeElasticips;
    return this;
  }

   /**
   * Free unused elastic IP addresses.
   * @return freeElasticips
  **/
  @Schema(description = "Free unused elastic IP addresses.")
  public Boolean isFreeElasticips() {
    return freeElasticips;
  }

  public void setFreeElasticips(Boolean freeElasticips) {
    this.freeElasticips = freeElasticips;
  }

  public AwsConfiguration iamAssumeRole(String iamAssumeRole) {
    this.iamAssumeRole = iamAssumeRole;
    return this;
  }

   /**
   * IAM assume role for cross-account access.
   * @return iamAssumeRole
  **/
  @Schema(description = "IAM assume role for cross-account access.")
  public String getIamAssumeRole() {
    return iamAssumeRole;
  }

  public void setIamAssumeRole(String iamAssumeRole) {
    this.iamAssumeRole = iamAssumeRole;
  }

  public AwsConfiguration publishVipToPublicZone(Boolean publishVipToPublicZone) {
    this.publishVipToPublicZone = publishVipToPublicZone;
    return this;
  }

   /**
   * If enabled and the virtual service is not floating ip capable, vip will be published to both private and public zones. Field introduced in 17.2.10.
   * @return publishVipToPublicZone
  **/
  @Schema(description = "If enabled and the virtual service is not floating ip capable, vip will be published to both private and public zones. Field introduced in 17.2.10.")
  public Boolean isPublishVipToPublicZone() {
    return publishVipToPublicZone;
  }

  public void setPublishVipToPublicZone(Boolean publishVipToPublicZone) {
    this.publishVipToPublicZone = publishVipToPublicZone;
  }

  public AwsConfiguration region(String region) {
    this.region = region;
    return this;
  }

   /**
   * AWS region.
   * @return region
  **/
  @Schema(description = "AWS region.")
  public String getRegion() {
    return region;
  }

  public void setRegion(String region) {
    this.region = region;
  }

  public AwsConfiguration route53Integration(Boolean route53Integration) {
    this.route53Integration = route53Integration;
    return this;
  }

   /**
   * If enabled, create/update DNS entries in Amazon Route 53 zones.
   * @return route53Integration
  **/
  @Schema(description = "If enabled, create/update DNS entries in Amazon Route 53 zones.")
  public Boolean isRoute53Integration() {
    return route53Integration;
  }

  public void setRoute53Integration(Boolean route53Integration) {
    this.route53Integration = route53Integration;
  }

  public AwsConfiguration s3Encryption(AwsEncryption s3Encryption) {
    this.s3Encryption = s3Encryption;
    return this;
  }

   /**
   * Get s3Encryption
   * @return s3Encryption
  **/
  @Schema(description = "")
  public AwsEncryption getS3Encryption() {
    return s3Encryption;
  }

  public void setS3Encryption(AwsEncryption s3Encryption) {
    this.s3Encryption = s3Encryption;
  }

  public AwsConfiguration secretAccessKey(String secretAccessKey) {
    this.secretAccessKey = secretAccessKey;
    return this;
  }

   /**
   * AWS secret access key.
   * @return secretAccessKey
  **/
  @Schema(description = "AWS secret access key.")
  public String getSecretAccessKey() {
    return secretAccessKey;
  }

  public void setSecretAccessKey(String secretAccessKey) {
    this.secretAccessKey = secretAccessKey;
  }

  public AwsConfiguration sqsEncryption(AwsEncryption sqsEncryption) {
    this.sqsEncryption = sqsEncryption;
    return this;
  }

   /**
   * Get sqsEncryption
   * @return sqsEncryption
  **/
  @Schema(description = "")
  public AwsEncryption getSqsEncryption() {
    return sqsEncryption;
  }

  public void setSqsEncryption(AwsEncryption sqsEncryption) {
    this.sqsEncryption = sqsEncryption;
  }

  public AwsConfiguration ttl(Integer ttl) {
    this.ttl = ttl;
    return this;
  }

   /**
   * Default TTL for all records. Allowed values are 1-172800. Field introduced in 17.1.3.
   * @return ttl
  **/
  @Schema(description = "Default TTL for all records. Allowed values are 1-172800. Field introduced in 17.1.3.")
  public Integer getTtl() {
    return ttl;
  }

  public void setTtl(Integer ttl) {
    this.ttl = ttl;
  }

  public AwsConfiguration useIamRoles(Boolean useIamRoles) {
    this.useIamRoles = useIamRoles;
    return this;
  }

   /**
   * Use IAM roles instead of access and secret key.
   * @return useIamRoles
  **/
  @Schema(description = "Use IAM roles instead of access and secret key.")
  public Boolean isUseIamRoles() {
    return useIamRoles;
  }

  public void setUseIamRoles(Boolean useIamRoles) {
    this.useIamRoles = useIamRoles;
  }

  public AwsConfiguration useSnsSqs(Boolean useSnsSqs) {
    this.useSnsSqs = useSnsSqs;
    return this;
  }

   /**
   * Use SNS/SQS based notifications for monitoring Auto Scaling Groups. Field introduced in 17.1.3.
   * @return useSnsSqs
  **/
  @Schema(description = "Use SNS/SQS based notifications for monitoring Auto Scaling Groups. Field introduced in 17.1.3.")
  public Boolean isUseSnsSqs() {
    return useSnsSqs;
  }

  public void setUseSnsSqs(Boolean useSnsSqs) {
    this.useSnsSqs = useSnsSqs;
  }

  public AwsConfiguration vpc(String vpc) {
    this.vpc = vpc;
    return this;
  }

   /**
   * VPC name.
   * @return vpc
  **/
  @Schema(description = "VPC name.")
  public String getVpc() {
    return vpc;
  }

  public void setVpc(String vpc) {
    this.vpc = vpc;
  }

  public AwsConfiguration vpcId(String vpcId) {
    this.vpcId = vpcId;
    return this;
  }

   /**
   * VPC ID.
   * @return vpcId
  **/
  @Schema(required = true, description = "VPC ID.")
  public String getVpcId() {
    return vpcId;
  }

  public void setVpcId(String vpcId) {
    this.vpcId = vpcId;
  }

  public AwsConfiguration wildcardAccess(Boolean wildcardAccess) {
    this.wildcardAccess = wildcardAccess;
    return this;
  }

   /**
   * If enabled, program SE security group with ingress rule to allow SSH (port 22) access from 0.0.0.0/0. Field deprecated in 17.1.5. Field introduced in 17.1.3.
   * @return wildcardAccess
  **/
  @Schema(description = "If enabled, program SE security group with ingress rule to allow SSH (port 22) access from 0.0.0.0/0. Field deprecated in 17.1.5. Field introduced in 17.1.3.")
  public Boolean isWildcardAccess() {
    return wildcardAccess;
  }

  public void setWildcardAccess(Boolean wildcardAccess) {
    this.wildcardAccess = wildcardAccess;
  }

  public AwsConfiguration zones(List<AwsZoneConfig> zones) {
    this.zones = zones;
    return this;
  }

  public AwsConfiguration addZonesItem(AwsZoneConfig zonesItem) {
    if (this.zones == null) {
      this.zones = new ArrayList<AwsZoneConfig>();
    }
    this.zones.add(zonesItem);
    return this;
  }

   /**
   * Placeholder for description of property zones of obj type AwsConfiguration field type str  type object
   * @return zones
  **/
  @Schema(description = "Placeholder for description of property zones of obj type AwsConfiguration field type str  type object")
  public List<AwsZoneConfig> getZones() {
    return zones;
  }

  public void setZones(List<AwsZoneConfig> zones) {
    this.zones = zones;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    AwsConfiguration awsConfiguration = (AwsConfiguration) o;
    return Objects.equals(this.accessKeyId, awsConfiguration.accessKeyId) &&
        Objects.equals(this.asgPollInterval, awsConfiguration.asgPollInterval) &&
        Objects.equals(this.ebsEncryption, awsConfiguration.ebsEncryption) &&
        Objects.equals(this.freeElasticips, awsConfiguration.freeElasticips) &&
        Objects.equals(this.iamAssumeRole, awsConfiguration.iamAssumeRole) &&
        Objects.equals(this.publishVipToPublicZone, awsConfiguration.publishVipToPublicZone) &&
        Objects.equals(this.region, awsConfiguration.region) &&
        Objects.equals(this.route53Integration, awsConfiguration.route53Integration) &&
        Objects.equals(this.s3Encryption, awsConfiguration.s3Encryption) &&
        Objects.equals(this.secretAccessKey, awsConfiguration.secretAccessKey) &&
        Objects.equals(this.sqsEncryption, awsConfiguration.sqsEncryption) &&
        Objects.equals(this.ttl, awsConfiguration.ttl) &&
        Objects.equals(this.useIamRoles, awsConfiguration.useIamRoles) &&
        Objects.equals(this.useSnsSqs, awsConfiguration.useSnsSqs) &&
        Objects.equals(this.vpc, awsConfiguration.vpc) &&
        Objects.equals(this.vpcId, awsConfiguration.vpcId) &&
        Objects.equals(this.wildcardAccess, awsConfiguration.wildcardAccess) &&
        Objects.equals(this.zones, awsConfiguration.zones);
  }

  @Override
  public int hashCode() {
    return Objects.hash(accessKeyId, asgPollInterval, ebsEncryption, freeElasticips, iamAssumeRole, publishVipToPublicZone, region, route53Integration, s3Encryption, secretAccessKey, sqsEncryption, ttl, useIamRoles, useSnsSqs, vpc, vpcId, wildcardAccess, zones);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class AwsConfiguration {\n");
    
    sb.append("    accessKeyId: ").append(toIndentedString(accessKeyId)).append("\n");
    sb.append("    asgPollInterval: ").append(toIndentedString(asgPollInterval)).append("\n");
    sb.append("    ebsEncryption: ").append(toIndentedString(ebsEncryption)).append("\n");
    sb.append("    freeElasticips: ").append(toIndentedString(freeElasticips)).append("\n");
    sb.append("    iamAssumeRole: ").append(toIndentedString(iamAssumeRole)).append("\n");
    sb.append("    publishVipToPublicZone: ").append(toIndentedString(publishVipToPublicZone)).append("\n");
    sb.append("    region: ").append(toIndentedString(region)).append("\n");
    sb.append("    route53Integration: ").append(toIndentedString(route53Integration)).append("\n");
    sb.append("    s3Encryption: ").append(toIndentedString(s3Encryption)).append("\n");
    sb.append("    secretAccessKey: ").append(toIndentedString(secretAccessKey)).append("\n");
    sb.append("    sqsEncryption: ").append(toIndentedString(sqsEncryption)).append("\n");
    sb.append("    ttl: ").append(toIndentedString(ttl)).append("\n");
    sb.append("    useIamRoles: ").append(toIndentedString(useIamRoles)).append("\n");
    sb.append("    useSnsSqs: ").append(toIndentedString(useSnsSqs)).append("\n");
    sb.append("    vpc: ").append(toIndentedString(vpc)).append("\n");
    sb.append("    vpcId: ").append(toIndentedString(vpcId)).append("\n");
    sb.append("    wildcardAccess: ").append(toIndentedString(wildcardAccess)).append("\n");
    sb.append("    zones: ").append(toIndentedString(zones)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}