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

export interface DsEngineVersionArgs {
  /**
   * (Optional) DB engine. (Default: `neptune`)
   */
  engine?: string | core.StringOut;

  /**
   * (Optional) The name of a specific DB parameter group family. An example parameter group family is `n
   * eptune1`.
   */
  parameterGroupFamily?: string | core.StringOut;

  /**
   * (Optional) Ordered list of preferred engine versions. The first match in this list will be returned.
   * If no preferred matches are found and the original search returned more than one result, an error i
   * s returned. If both the `version` and `preferred_versions` arguments are not configured, the data so
   * urce will return the default version for the engine.
   */
  preferredVersions?: core.Array<string> | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Version of the DB engine. For example, `1.0.1.0`, `1.0.2.2`, and `1.0.3.0`. If both the `
   * version` and `preferred_versions` arguments are not configured, the data source will return the defa
   * ult version for the engine.
   */
  version?: string | core.StringOut;
}

export class DsEngineVersion extends core.Data<DsEngineVersionArgs> {
  /**
   * (Optional) DB engine. (Default: `neptune`)
   */
  @core.attr(String)
  public engine?: string | core.StringOut;

  /**
   * The description of the database engine.
   */
  @core.attr(String, { computed: true })
  public engineDescription!: string | core.StringOut;

  /**
   * Set of log types that the database engine has available for export to CloudWatch Logs.
   */
  @core.attr(String, { computed: true, kind: "array" })
  public exportableLogTypes!:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

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

  /**
   * (Optional) The name of a specific DB parameter group family. An example parameter group family is `n
   * eptune1`.
   */
  @core.attr(String, { computed: true })
  public parameterGroupFamily?: string | core.StringOut;

  /**
   * (Optional) Ordered list of preferred engine versions. The first match in this list will be returned.
   * If no preferred matches are found and the original search returned more than one result, an error i
   * s returned. If both the `version` and `preferred_versions` arguments are not configured, the data so
   * urce will return the default version for the engine.
   */
  @core.attr(String, { kind: "array" })
  public preferredVersions?: core.Array<string> | core.ArrayOut<core.StringOut>;

  /**
   * Set of the time zones supported by this engine.
   */
  @core.attr(String, { computed: true, kind: "array" })
  public supportedTimezones!:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

  /**
   * Indicates whether the engine version supports exporting the log types specified by `exportable_log_t
   * ypes` to CloudWatch Logs.
   */
  @core.attr(Boolean, { computed: true })
  public supportsLogExportsToCloudwatch!: boolean | core.BooleanOut;

  /**
   * Indicates whether the database engine version supports read replicas.
   */
  @core.attr(Boolean, { computed: true })
  public supportsReadReplica!: boolean | core.BooleanOut;

  /**
   * Set of engine versions that this database engine version can be upgraded to.
   */
  @core.attr(String, { computed: true, kind: "array" })
  public validUpgradeTargets!:
    | core.Array<string>
    | core.ArrayOut<core.StringOut>;

  /**
   * (Optional) Version of the DB engine. For example, `1.0.1.0`, `1.0.2.2`, and `1.0.3.0`. If both the `
   * version` and `preferred_versions` arguments are not configured, the data source will return the defa
   * ult version for the engine.
   */
  @core.attr(String, { computed: true })
  public version?: string | core.StringOut;

  /**
   * The description of the database engine version.
   */
  @core.attr(String, { computed: true })
  public versionDescription!: string | core.StringOut;

  constructor(name: string, args?: DsEngineVersionArgs) {
    super(name, "aws_neptune_engine_version", args);
  }

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