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

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

  domainName: string | core.StringOut;

  fileSystemAdministratorsGroup?: string | core.StringOut;

  organizationalUnitDistinguishedName?: string | core.StringOut;

  password: string | core.StringOut;

  username: string | core.StringOut;
}

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

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

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

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

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

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

export interface AuditLogConfigurationArgs extends core.SchemaArgs {
  auditLogDestination?: string | core.StringOut;

  fileAccessAuditLogLevel?: string | core.StringOut;

  fileShareAccessAuditLogLevel?: string | core.StringOut;
}

export class AuditLogConfiguration extends core.Schema<AuditLogConfigurationArgs> {
  @core.attr(String, { computed: true })
  public auditLogDestination?: string | core.StringOut;

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

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

export interface WindowsFileSystemArgs extends core.ResourceArgs {
  activeDirectoryId?: string | core.StringOut;

  aliases?: core.Array<string> | core.ArrayOut<core.StringOut>;

  auditLogConfiguration?: AuditLogConfiguration;

  automaticBackupRetentionDays?: number | core.NumberOut;

  backupId?: string | core.StringOut;

  copyTagsToBackups?: boolean | core.BooleanOut;

  dailyAutomaticBackupStartTime?: string | core.StringOut;

  deploymentType?: string | core.StringOut;

  kmsKeyId?: string | core.StringOut;

  preferredSubnetId?: string | core.StringOut;

  securityGroupIds?: core.Array<string> | core.ArrayOut<core.StringOut>;

  selfManagedActiveDirectory?: SelfManagedActiveDirectory;

  skipFinalBackup?: boolean | core.BooleanOut;

  storageCapacity?: number | core.NumberOut;

  storageType?: string | core.StringOut;

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

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

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

  throughputCapacity: number | core.NumberOut;

  weeklyMaintenanceStartTime?: string | core.StringOut;
}

export class WindowsFileSystem extends core.Resource<WindowsFileSystemArgs> {
  @core.attr(String)
  public activeDirectoryId?: string | core.StringOut;

  @core.attr(String, { kind: "array" })
  public aliases?: core.Array<string> | core.ArrayOut<core.StringOut>;

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

  @core.attr(AuditLogConfiguration, { computed: true })
  public auditLogConfiguration?: AuditLogConfiguration;

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

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

  @core.attr(Boolean)
  public copyTagsToBackups?: boolean | core.BooleanOut;

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

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

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

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

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

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

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

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

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

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

  @core.attr(String, { kind: "array" })
  public securityGroupIds?: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(SelfManagedActiveDirectory)
  public selfManagedActiveDirectory?: SelfManagedActiveDirectory;

  @core.attr(Boolean)
  public skipFinalBackup?: boolean | core.BooleanOut;

  @core.attr(Number, { computed: true })
  public storageCapacity?: number | core.NumberOut;

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

  @core.attr(String, { kind: "array" })
  public subnetIds!: core.Array<string> | core.ArrayOut<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(Number)
  public throughputCapacity!: number | core.NumberOut;

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

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

  constructor(name: string, args?: WindowsFileSystemArgs) {
    super(name, "aws_fsx_windows_file_system", args);
  }

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