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

export interface CognitoMemberDefinitionArgs extends core.SchemaArgs {
  clientId: string | core.StringOut;

  userGroup: string | core.StringOut;

  userPool: string | core.StringOut;
}

export class CognitoMemberDefinition extends core.Schema<CognitoMemberDefinitionArgs> {
  @core.attr(String)
  public clientId!: string | core.StringOut;

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

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

export interface OidcMemberDefinitionArgs extends core.SchemaArgs {
  groups: core.Array<string> | core.ArrayOut<core.StringOut>;
}

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

export interface MemberDefinitionArgs extends core.SchemaArgs {
  cognitoMemberDefinition?: CognitoMemberDefinition;

  oidcMemberDefinition?: OidcMemberDefinition;
}

export class MemberDefinition extends core.Schema<MemberDefinitionArgs> {
  @core.attr(CognitoMemberDefinition)
  public cognitoMemberDefinition?: CognitoMemberDefinition;

  @core.attr(OidcMemberDefinition)
  public oidcMemberDefinition?: OidcMemberDefinition;
}

export interface NotificationConfigurationArgs extends core.SchemaArgs {
  notificationTopicArn?: string | core.StringOut;
}

export class NotificationConfiguration extends core.Schema<NotificationConfigurationArgs> {
  @core.attr(String)
  public notificationTopicArn?: string | core.StringOut;
}

export interface WorkteamArgs extends core.ResourceArgs {
  description: string | core.StringOut;

  memberDefinition:
    | core.Array<MemberDefinition>
    | core.ArrayOut<MemberDefinition>;

  notificationConfiguration?: NotificationConfiguration;

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

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

  workforceName: string | core.StringOut;

  workteamName: string | core.StringOut;
}

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

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

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

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

  @core.attr(NotificationConfiguration)
  public notificationConfiguration?: NotificationConfiguration;

  @core.attr(String, { computed: true })
  public subdomain!: 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)
  public workforceName!: string | core.StringOut;

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

  constructor(name: string, args?: WorkteamArgs) {
    super(name, "aws_sagemaker_workteam", args);
  }

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