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

export interface NameNodeArgs extends core.SchemaArgs {
  hostname: string | core.StringOut;

  port: number | core.NumberOut;
}

export class NameNode extends core.Schema<NameNodeArgs> {
  @core.attr(String)
  public hostname!: string | core.StringOut;

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

export interface QopConfigurationArgs extends core.SchemaArgs {
  dataTransferProtection?: string | core.StringOut;

  rpcProtection?: string | core.StringOut;
}

export class QopConfiguration extends core.Schema<QopConfigurationArgs> {
  @core.attr(String)
  public dataTransferProtection?: string | core.StringOut;

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

export interface LocationHdfsArgs extends core.ResourceArgs {
  agentArns: core.Array<string> | core.ArrayOut<core.StringOut>;

  authenticationType?: string | core.StringOut;

  blockSize?: number | core.NumberOut;

  kerberosKeytab?: string | core.StringOut;

  kerberosKrb5Conf?: string | core.StringOut;

  kerberosPrincipal?: string | core.StringOut;

  kmsKeyProviderUri?: string | core.StringOut;

  nameNode: core.Array<NameNode> | core.ArrayOut<NameNode>;

  qopConfiguration?: QopConfiguration;

  replicationFactor?: number | core.NumberOut;

  simpleUser?: string | core.StringOut;

  subdirectory?: string | core.StringOut;

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

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

export class LocationHdfs extends core.Resource<LocationHdfsArgs> {
  @core.attr(String, { kind: "array" })
  public agentArns!: core.Array<string> | core.ArrayOut<core.StringOut>;

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

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

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

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

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

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

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

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

  @core.attr(NameNode, { kind: "array" })
  public nameNode!: core.Array<NameNode> | core.ArrayOut<NameNode>;

  @core.attr(QopConfiguration)
  public qopConfiguration?: QopConfiguration;

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

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

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

  @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, { computed: true })
  public uri!: string | core.StringOut;

  constructor(name: string, args?: LocationHdfsArgs) {
    super(name, "aws_datasync_location_hdfs", args);
  }

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