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

export interface AvailabilityZonesArgs extends core.SchemaArgs {
  name: string | core.StringOut;
}

export class AvailabilityZones extends core.Schema<AvailabilityZonesArgs> {
  @core.attr(String, { computed: true })
  public name!: string | core.StringOut;
}

export interface BrokerInstanceOptionsArgs extends core.SchemaArgs {
  availabilityZones:
    | core.Array<AvailabilityZones>
    | core.ArrayOut<AvailabilityZones>;

  engineType: string | core.StringOut;

  hostInstanceType: string | core.StringOut;

  storageType: string | core.StringOut;

  supportedDeploymentModes: core.Array<string> | core.ArrayOut<core.StringOut>;

  supportedEngineVersions: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export class BrokerInstanceOptions extends core.Schema<BrokerInstanceOptionsArgs> {
  @core.attr(AvailabilityZones, { computed: true, kind: "array" })
  public availabilityZones!:
    | core.Array<AvailabilityZones>
    | core.ArrayOut<AvailabilityZones>;

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

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

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

  @core.attr(String, { computed: true, kind: "array" })
  public supportedDeploymentModes!:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

  @core.attr(String, { computed: true, kind: "array" })
  public supportedEngineVersions!:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;
}

export interface DsBrokerInstanceTypeOfferingsArgs {
  /**
   * (Optional) Filter response by engine type.
   */
  engineType?: string | core.StringOut;

  /**
   * (Optional) Filter response by host instance type.
   */
  hostInstanceType?: string | core.StringOut;

  /**
   * (Optional) Filter response by storage type.
   */
  storageType?: string | core.StringOut;
}

export class DsBrokerInstanceTypeOfferings extends core.Data<DsBrokerInstanceTypeOfferingsArgs> {
  /**
   * Option for host instance type. See Broker Instance Options below.
   */
  @core.attr(BrokerInstanceOptions, { computed: true, kind: "array" })
  public brokerInstanceOptions!:
    | core.Array<BrokerInstanceOptions>
    | core.ArrayOut<BrokerInstanceOptions>;

  /**
   * (Optional) Filter response by engine type.
   */
  @core.attr(String)
  public engineType?: string | core.StringOut;

  /**
   * (Optional) Filter response by host instance type.
   */
  @core.attr(String)
  public hostInstanceType?: string | core.StringOut;

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

  /**
   * (Optional) Filter response by storage type.
   */
  @core.attr(String)
  public storageType?: string | core.StringOut;

  constructor(name: string, args?: DsBrokerInstanceTypeOfferingsArgs) {
    super(name, "aws_mq_broker_instance_type_offerings", args);
  }

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