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

export interface PostgresqlArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class Postgresql extends core.Schema<PostgresqlArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface SqlServerArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class SqlServer extends core.Schema<SqlServerArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface JiraArgs extends core.SchemaArgs {
  siteBaseUrl: string | core.StringOut;
}

export class Jira extends core.Schema<JiraArgs> {
  @core.attr(String)
  public siteBaseUrl!: string | core.StringOut;
}

export interface MariaDbArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class MariaDb extends core.Schema<MariaDbArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface RdsArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  instanceId: string | core.StringOut;
}

export class Rds extends core.Schema<RdsArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public instanceId!: string | core.StringOut;
}

export interface AuroraArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class Aurora extends core.Schema<AuroraArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface OracleArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class Oracle extends core.Schema<OracleArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface SnowflakeArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  host: string | core.StringOut;

  warehouse: string | core.StringOut;
}

export class Snowflake extends core.Schema<SnowflakeArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(String)
  public warehouse!: string | core.StringOut;
}

export interface ServiceNowArgs extends core.SchemaArgs {
  siteBaseUrl: string | core.StringOut;
}

export class ServiceNow extends core.Schema<ServiceNowArgs> {
  @core.attr(String)
  public siteBaseUrl!: string | core.StringOut;
}

export interface RedshiftArgs extends core.SchemaArgs {
  clusterId?: string | core.StringOut;

  database: string | core.StringOut;

  host?: string | core.StringOut;

  port?: number | core.NumberOut;
}

export class Redshift extends core.Schema<RedshiftArgs> {
  @core.attr(String)
  public clusterId?: string | core.StringOut;

  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host?: string | core.StringOut;

  @core.attr(Number)
  public port?: number | core.NumberOut;
}

export interface SparkArgs extends core.SchemaArgs {
  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class Spark extends core.Schema<SparkArgs> {
  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface AuroraPostgresqlArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class AuroraPostgresql extends core.Schema<AuroraPostgresqlArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface AwsIotAnalyticsArgs extends core.SchemaArgs {
  dataSetName: string | core.StringOut;
}

export class AwsIotAnalytics extends core.Schema<AwsIotAnalyticsArgs> {
  @core.attr(String)
  public dataSetName!: string | core.StringOut;
}

export interface TwitterArgs extends core.SchemaArgs {
  maxRows: number | core.NumberOut;

  query: string | core.StringOut;
}

export class Twitter extends core.Schema<TwitterArgs> {
  @core.attr(Number)
  public maxRows!: number | core.NumberOut;

  @core.attr(String)
  public query!: string | core.StringOut;
}

export interface PrestoArgs extends core.SchemaArgs {
  catalog: string | core.StringOut;

  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class Presto extends core.Schema<PrestoArgs> {
  @core.attr(String)
  public catalog!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface AthenaArgs extends core.SchemaArgs {
  workGroup?: string | core.StringOut;
}

export class Athena extends core.Schema<AthenaArgs> {
  @core.attr(String)
  public workGroup?: string | core.StringOut;
}

export interface ManifestFileLocationArgs extends core.SchemaArgs {
  bucket: string | core.StringOut;

  key: string | core.StringOut;
}

export class ManifestFileLocation extends core.Schema<ManifestFileLocationArgs> {
  @core.attr(String)
  public bucket!: string | core.StringOut;

  @core.attr(String)
  public key!: string | core.StringOut;
}

export interface S3Args extends core.SchemaArgs {
  manifestFileLocation: ManifestFileLocation;
}

export class S3 extends core.Schema<S3Args> {
  @core.attr(ManifestFileLocation)
  public manifestFileLocation!: ManifestFileLocation;
}

export interface TeradataArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class Teradata extends core.Schema<TeradataArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface AmazonElasticsearchArgs extends core.SchemaArgs {
  domain: string | core.StringOut;
}

export class AmazonElasticsearch extends core.Schema<AmazonElasticsearchArgs> {
  @core.attr(String)
  public domain!: string | core.StringOut;
}

export interface MysqlArgs extends core.SchemaArgs {
  database: string | core.StringOut;

  host: string | core.StringOut;

  port: number | core.NumberOut;
}

export class Mysql extends core.Schema<MysqlArgs> {
  @core.attr(String)
  public database!: string | core.StringOut;

  @core.attr(String)
  public host!: string | core.StringOut;

  @core.attr(Number)
  public port!: number | core.NumberOut;
}

export interface ParametersArgs extends core.SchemaArgs {
  amazonElasticsearch?: AmazonElasticsearch;

  athena?: Athena;

  aurora?: Aurora;

  auroraPostgresql?: AuroraPostgresql;

  awsIotAnalytics?: AwsIotAnalytics;

  jira?: Jira;

  mariaDb?: MariaDb;

  mysql?: Mysql;

  oracle?: Oracle;

  postgresql?: Postgresql;

  presto?: Presto;

  rds?: Rds;

  redshift?: Redshift;

  s3?: S3;

  serviceNow?: ServiceNow;

  snowflake?: Snowflake;

  spark?: Spark;

  sqlServer?: SqlServer;

  teradata?: Teradata;

  twitter?: Twitter;
}

export class Parameters extends core.Schema<ParametersArgs> {
  @core.attr(AmazonElasticsearch)
  public amazonElasticsearch?: AmazonElasticsearch;

  @core.attr(Athena)
  public athena?: Athena;

  @core.attr(Aurora)
  public aurora?: Aurora;

  @core.attr(AuroraPostgresql)
  public auroraPostgresql?: AuroraPostgresql;

  @core.attr(AwsIotAnalytics)
  public awsIotAnalytics?: AwsIotAnalytics;

  @core.attr(Jira)
  public jira?: Jira;

  @core.attr(MariaDb)
  public mariaDb?: MariaDb;

  @core.attr(Mysql)
  public mysql?: Mysql;

  @core.attr(Oracle)
  public oracle?: Oracle;

  @core.attr(Postgresql)
  public postgresql?: Postgresql;

  @core.attr(Presto)
  public presto?: Presto;

  @core.attr(Rds)
  public rds?: Rds;

  @core.attr(Redshift)
  public redshift?: Redshift;

  @core.attr(S3)
  public s3?: S3;

  @core.attr(ServiceNow)
  public serviceNow?: ServiceNow;

  @core.attr(Snowflake)
  public snowflake?: Snowflake;

  @core.attr(Spark)
  public spark?: Spark;

  @core.attr(SqlServer)
  public sqlServer?: SqlServer;

  @core.attr(Teradata)
  public teradata?: Teradata;

  @core.attr(Twitter)
  public twitter?: Twitter;
}

export interface CredentialPairArgs extends core.SchemaArgs {
  password: string | core.StringOut;

  username: string | core.StringOut;
}

export class CredentialPair extends core.Schema<CredentialPairArgs> {
  @core.attr(String)
  public password!: string | core.StringOut;

  @core.attr(String)
  public username!: string | core.StringOut;
}

export interface CredentialsArgs extends core.SchemaArgs {
  copySourceArn?: string | core.StringOut;

  credentialPair?: CredentialPair;
}

export class Credentials extends core.Schema<CredentialsArgs> {
  @core.attr(String)
  public copySourceArn?: string | core.StringOut;

  @core.attr(CredentialPair)
  public credentialPair?: CredentialPair;
}

export interface PermissionArgs extends core.SchemaArgs {
  actions: core.Array<string> | core.ArrayOut<core.StringOut>;

  principal: string | core.StringOut;
}

export class Permission extends core.Schema<PermissionArgs> {
  @core.attr(String, { kind: "array" })
  public actions!: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public principal!: string | core.StringOut;
}

export interface SslPropertiesArgs extends core.SchemaArgs {
  disableSsl: boolean | core.BooleanOut;
}

export class SslProperties extends core.Schema<SslPropertiesArgs> {
  @core.attr(Boolean)
  public disableSsl!: boolean | core.BooleanOut;
}

export interface VpcConnectionPropertiesArgs extends core.SchemaArgs {
  vpcConnectionArn: string | core.StringOut;
}

export class VpcConnectionProperties extends core.Schema<VpcConnectionPropertiesArgs> {
  @core.attr(String)
  public vpcConnectionArn!: string | core.StringOut;
}

export interface DataSourceArgs extends core.ResourceArgs {
  awsAccountId?: string | core.StringOut;

  credentials?: Credentials;

  dataSourceId: string | core.StringOut;

  name: string | core.StringOut;

  parameters: Parameters;

  permission?: core.Array<Permission> | core.ArrayOut<Permission>;

  sslProperties?: SslProperties;

  tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

  type: string | core.StringOut;

  vpcConnectionProperties?: VpcConnectionProperties;
}

export class DataSource extends core.Resource<DataSourceArgs> {
  @core.attr(String, { computed: true })
  public arn!: string | core.StringOut;

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

  @core.attr(Credentials)
  public credentials?: Credentials;

  @core.attr(String)
  public dataSourceId!: string | core.StringOut;

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

  @core.attr(String)
  public name!: string | core.StringOut;

  @core.attr(Parameters)
  public parameters!: Parameters;

  @core.attr(Permission, { kind: "array" })
  public permission?: core.Array<Permission> | core.ArrayOut<Permission>;

  @core.attr(SslProperties)
  public sslProperties?: SslProperties;

  @core.attr(String, { kind: "map" })
  public tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  @core.attr(String, { computed: true, kind: "map" })
  public tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

  @core.attr(String)
  public type!: string | core.StringOut;

  @core.attr(VpcConnectionProperties)
  public vpcConnectionProperties?: VpcConnectionProperties;

  constructor(name: string, args?: DataSourceArgs) {
    super(name, "aws_quicksight_data_source", args);
  }

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