import * as core from "@terrascript/core";

export interface DsOrderableDbInstanceArgs {
  /**
   * (Optional) Availability zone group.
   */
  availabilityZoneGroup?: string | core.StringOut;

  /**
   * (Required) DB engine. Engine values include `aurora`, `aurora-mysql`, `aurora-postgresql`, `docdb`,
   * mariadb`, `mysql`, `neptune`, `oracle-ee`, `oracle-se`, `oracle-se1`, `oracle-se2`, `postgres`, `sq
   * lserver-ee`, `sqlserver-ex`, `sqlserver-se`, and `sqlserver-web`.
   */
  engine: string | core.StringOut;

  /**
   * (Optional) Version of the DB engine. If none is provided, the AWS-defined default version will be us
   * ed.
   */
  engineVersion?: string | core.StringOut;

  /**
   * (Optional) DB instance class. Examples of classes are `db.m3.2xlarge`, `db.t2.small`, and `db.m3.med
   * ium`.
   */
  instanceClass?: string | core.StringOut;

  /**
   * (Optional) License model. Examples of license models are `general-public-license`, `bring-your-own-l
   * icense`, and `amazon-license`.
   */
  licenseModel?: string | core.StringOut;

  /**
   * (Optional) Ordered list of preferred RDS DB instance engine versions. The first match in this list w
   * ill be returned. If no preferred matches are found and the original search returned more than one re
   * sult, an error is returned.
   */
  preferredEngineVersions?: core.Array<string> | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Ordered list of preferred RDS DB instance classes. The first match in this list will be r
   * eturned. If no preferred matches are found and the original search returned more than one result, an
   * error is returned.
   */
  preferredInstanceClasses?: core.Array<string> | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Storage types. Examples of storage types are `standard`, `io1`, `gp2`, and `aurora`.
   */
  storageType?: string | core.StringOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports Enhanced Monitoring at intervals from 1 to 6
   * 0 seconds.
   */
  supportsEnhancedMonitoring?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports Aurora global databases with a specific comb
   * ination of other DB engine attributes.
   */
  supportsGlobalDatabases?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports IAM database authentication.
   */
  supportsIamDatabaseAuthentication?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports provisioned IOPS.
   */
  supportsIops?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports Kerberos Authentication.
   */
  supportsKerberosAuthentication?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports Performance Insights.
   */
  supportsPerformanceInsights?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure Amazon RDS can automatically scale storage for DB instances that us
   * e the specified DB instance class.
   */
  supportsStorageAutoscaling?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports encrypted storage.
   */
  supportsStorageEncryption?: boolean | core.BooleanOut;

  /**
   * (Optional) Boolean that indicates whether to show only VPC or non-VPC offerings.
   */
  vpc?: boolean | core.BooleanOut;
}

export class DsOrderableDbInstance extends core.Data<DsOrderableDbInstanceArgs> {
  /**
   * (Optional) Availability zone group.
   */
  @core.attr(String, { computed: true })
  public availabilityZoneGroup?: string | core.StringOut;

  /**
   * Availability zones where the instance is available.
   */
  @core.attr(String, { computed: true, kind: "array" })
  public availabilityZones!: core.Array<string> | core.ArrayOut<core.StringOut>;

  /**
   * (Required) DB engine. Engine values include `aurora`, `aurora-mysql`, `aurora-postgresql`, `docdb`,
   * mariadb`, `mysql`, `neptune`, `oracle-ee`, `oracle-se`, `oracle-se1`, `oracle-se2`, `postgres`, `sq
   * lserver-ee`, `sqlserver-ex`, `sqlserver-se`, and `sqlserver-web`.
   */
  @core.attr(String)
  public engine!: string | core.StringOut;

  /**
   * (Optional) Version of the DB engine. If none is provided, the AWS-defined default version will be us
   * ed.
   */
  @core.attr(String, { computed: true })
  public engineVersion?: string | core.StringOut;

  @core.attr(String, { computed: true })
  public id!: string | core.StringOut;

  /**
   * (Optional) DB instance class. Examples of classes are `db.m3.2xlarge`, `db.t2.small`, and `db.m3.med
   * ium`.
   */
  @core.attr(String, { computed: true })
  public instanceClass?: string | core.StringOut;

  /**
   * (Optional) License model. Examples of license models are `general-public-license`, `bring-your-own-l
   * icense`, and `amazon-license`.
   */
  @core.attr(String, { computed: true })
  public licenseModel?: string | core.StringOut;

  /**
   * Maximum total provisioned IOPS for a DB instance.
   */
  @core.attr(Number, { computed: true })
  public maxIopsPerDbInstance!: number | core.NumberOut;

  /**
   * Maximum provisioned IOPS per GiB for a DB instance.
   */
  @core.attr(Number, { computed: true })
  public maxIopsPerGib!: number | core.NumberOut;

  /**
   * Maximum storage size for a DB instance.
   */
  @core.attr(Number, { computed: true })
  public maxStorageSize!: number | core.NumberOut;

  /**
   * Minimum total provisioned IOPS for a DB instance.
   */
  @core.attr(Number, { computed: true })
  public minIopsPerDbInstance!: number | core.NumberOut;

  /**
   * Minimum provisioned IOPS per GiB for a DB instance.
   */
  @core.attr(Number, { computed: true })
  public minIopsPerGib!: number | core.NumberOut;

  /**
   * Minimum storage size for a DB instance.
   */
  @core.attr(Number, { computed: true })
  public minStorageSize!: number | core.NumberOut;

  /**
   * Whether a DB instance is Multi-AZ capable.
   */
  @core.attr(Boolean, { computed: true })
  public multiAzCapable!: boolean | core.BooleanOut;

  /**
   * Whether a DB instance supports RDS on Outposts.
   */
  @core.attr(Boolean, { computed: true })
  public outpostCapable!: boolean | core.BooleanOut;

  /**
   * (Optional) Ordered list of preferred RDS DB instance engine versions. The first match in this list w
   * ill be returned. If no preferred matches are found and the original search returned more than one re
   * sult, an error is returned.
   */
  @core.attr(String, { kind: "array" })
  public preferredEngineVersions?:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Ordered list of preferred RDS DB instance classes. The first match in this list will be r
   * eturned. If no preferred matches are found and the original search returned more than one result, an
   * error is returned.
   */
  @core.attr(String, { kind: "array" })
  public preferredInstanceClasses?:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

  /**
   * Whether a DB instance can have a read replica.
   */
  @core.attr(Boolean, { computed: true })
  public readReplicaCapable!: boolean | core.BooleanOut;

  /**
   * (Optional) Storage types. Examples of storage types are `standard`, `io1`, `gp2`, and `aurora`.
   */
  @core.attr(String, { computed: true })
  public storageType?: string | core.StringOut;

  /**
   * A list of the supported DB engine modes.
   */
  @core.attr(String, { computed: true, kind: "array" })
  public supportedEngineModes!:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

  /**
   * The network types supported by the DB instance (`IPV4` or `DUAL`).
   */
  @core.attr(String, { computed: true, kind: "array" })
  public supportedNetworkTypes!:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Enable this to ensure a DB instance supports Enhanced Monitoring at intervals from 1 to 6
   * 0 seconds.
   */
  @core.attr(Boolean, { computed: true })
  public supportsEnhancedMonitoring?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports Aurora global databases with a specific comb
   * ination of other DB engine attributes.
   */
  @core.attr(Boolean, { computed: true })
  public supportsGlobalDatabases?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports IAM database authentication.
   */
  @core.attr(Boolean, { computed: true })
  public supportsIamDatabaseAuthentication?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports provisioned IOPS.
   */
  @core.attr(Boolean, { computed: true })
  public supportsIops?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports Kerberos Authentication.
   */
  @core.attr(Boolean, { computed: true })
  public supportsKerberosAuthentication?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports Performance Insights.
   */
  @core.attr(Boolean, { computed: true })
  public supportsPerformanceInsights?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure Amazon RDS can automatically scale storage for DB instances that us
   * e the specified DB instance class.
   */
  @core.attr(Boolean, { computed: true })
  public supportsStorageAutoscaling?: boolean | core.BooleanOut;

  /**
   * (Optional) Enable this to ensure a DB instance supports encrypted storage.
   */
  @core.attr(Boolean, { computed: true })
  public supportsStorageEncryption?: boolean | core.BooleanOut;

  /**
   * (Optional) Boolean that indicates whether to show only VPC or non-VPC offerings.
   */
  @core.attr(Boolean, { computed: true })
  public vpc?: boolean | core.BooleanOut;

  constructor(name: string, args?: DsOrderableDbInstanceArgs) {
    super(name, "aws_rds_orderable_db_instance", args);
  }

  public override getNamespace(): string {
    return "aws_rds";
  }
}
