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

export interface WorkspaceCreationPropertiesArgs extends core.SchemaArgs {
  customSecurityGroupId?: string | core.StringOut;

  defaultOu?: string | core.StringOut;

  enableInternetAccess?: boolean | core.BooleanOut;

  enableMaintenanceMode?: boolean | core.BooleanOut;

  userEnabledAsLocalAdministrator?: boolean | core.BooleanOut;
}

export class WorkspaceCreationProperties extends core.Schema<WorkspaceCreationPropertiesArgs> {
  @core.attr(String)
  public customSecurityGroupId?: string | core.StringOut;

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

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

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

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

export interface SelfServicePermissionsArgs extends core.SchemaArgs {
  changeComputeType?: boolean | core.BooleanOut;

  increaseVolumeSize?: boolean | core.BooleanOut;

  rebuildWorkspace?: boolean | core.BooleanOut;

  restartWorkspace?: boolean | core.BooleanOut;

  switchRunningMode?: boolean | core.BooleanOut;
}

export class SelfServicePermissions extends core.Schema<SelfServicePermissionsArgs> {
  @core.attr(Boolean)
  public changeComputeType?: boolean | core.BooleanOut;

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

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

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

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

export interface WorkspaceAccessPropertiesArgs extends core.SchemaArgs {
  deviceTypeAndroid?: string | core.StringOut;

  deviceTypeChromeos?: string | core.StringOut;

  deviceTypeIos?: string | core.StringOut;

  deviceTypeLinux?: string | core.StringOut;

  deviceTypeOsx?: string | core.StringOut;

  deviceTypeWeb?: string | core.StringOut;

  deviceTypeWindows?: string | core.StringOut;

  deviceTypeZeroclient?: string | core.StringOut;
}

export class WorkspaceAccessProperties extends core.Schema<WorkspaceAccessPropertiesArgs> {
  @core.attr(String)
  public deviceTypeAndroid?: string | core.StringOut;

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

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

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

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

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

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

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

export interface DirectoryArgs extends core.ResourceArgs {
  directoryId: string | core.StringOut;

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

  selfServicePermissions?: SelfServicePermissions;

  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>;

  workspaceAccessProperties?: WorkspaceAccessProperties;

  workspaceCreationProperties?: WorkspaceCreationProperties;
}

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

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

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

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

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

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

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

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

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

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

  @core.attr(SelfServicePermissions, { computed: true })
  public selfServicePermissions?: SelfServicePermissions;

  @core.attr(String, { computed: true, 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(WorkspaceAccessProperties, { computed: true })
  public workspaceAccessProperties?: WorkspaceAccessProperties;

  @core.attr(WorkspaceCreationProperties, { computed: true })
  public workspaceCreationProperties?: WorkspaceCreationProperties;

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

  constructor(name: string, args?: DirectoryArgs) {
    super(name, "aws_workspaces_directory", args);
  }

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