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

export interface SelfManagedActiveDirectoryConfigurationArgs
  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 SelfManagedActiveDirectoryConfiguration extends core.Schema<SelfManagedActiveDirectoryConfigurationArgs> {
  @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 ActiveDirectoryConfigurationArgs extends core.SchemaArgs {
  netbiosName?: string | core.StringOut;

  selfManagedActiveDirectoryConfiguration?: SelfManagedActiveDirectoryConfiguration;
}

export class ActiveDirectoryConfiguration extends core.Schema<ActiveDirectoryConfigurationArgs> {
  @core.attr(String)
  public netbiosName?: string | core.StringOut;

  @core.attr(SelfManagedActiveDirectoryConfiguration)
  public selfManagedActiveDirectoryConfiguration?: SelfManagedActiveDirectoryConfiguration;
}

export interface NfsArgs extends core.SchemaArgs {
  dnsName: string | core.StringOut;

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

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

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

export interface SmbArgs extends core.SchemaArgs {
  dnsName: string | core.StringOut;

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

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

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

export interface IscsiArgs extends core.SchemaArgs {
  dnsName: string | core.StringOut;

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

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

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

export interface ManagementArgs extends core.SchemaArgs {
  dnsName: string | core.StringOut;

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

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

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

export interface EndpointsArgs extends core.SchemaArgs {
  iscsi: core.Array<Iscsi> | core.ArrayOut<Iscsi>;

  management: core.Array<Management> | core.ArrayOut<Management>;

  nfs: core.Array<Nfs> | core.ArrayOut<Nfs>;

  smb: core.Array<Smb> | core.ArrayOut<Smb>;
}

export class Endpoints extends core.Schema<EndpointsArgs> {
  @core.attr(Iscsi, { computed: true, kind: "array" })
  public iscsi!: core.Array<Iscsi> | core.ArrayOut<Iscsi>;

  @core.attr(Management, { computed: true, kind: "array" })
  public management!: core.Array<Management> | core.ArrayOut<Management>;

  @core.attr(Nfs, { computed: true, kind: "array" })
  public nfs!: core.Array<Nfs> | core.ArrayOut<Nfs>;

  @core.attr(Smb, { computed: true, kind: "array" })
  public smb!: core.Array<Smb> | core.ArrayOut<Smb>;
}

export interface OntapStorageVirtualMachineArgs extends core.ResourceArgs {
  activeDirectoryConfiguration?: ActiveDirectoryConfiguration;

  fileSystemId: string | core.StringOut;

  name: string | core.StringOut;

  rootVolumeSecurityStyle?: string | core.StringOut;

  svmAdminPassword?: string | core.StringOut;

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

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

export class OntapStorageVirtualMachine extends core.Resource<OntapStorageVirtualMachineArgs> {
  @core.attr(ActiveDirectoryConfiguration)
  public activeDirectoryConfiguration?: ActiveDirectoryConfiguration;

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

  @core.attr(Endpoints, { computed: true, kind: "array" })
  public endpoints!: core.Array<Endpoints> | core.ArrayOut<Endpoints>;

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

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

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

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

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

  @core.attr(String)
  public svmAdminPassword?: 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 uuid!: string | core.StringOut;

  constructor(name: string, args?: OntapStorageVirtualMachineArgs) {
    super(name, "aws_fsx_ontap_storage_virtual_machine", args);
  }

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