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

export interface SharingSettingsArgs extends core.SchemaArgs {
  notebookOutputOption?: string | core.StringOut;

  s3KmsKeyId?: string | core.StringOut;

  s3OutputPath?: string | core.StringOut;
}

export class SharingSettings extends core.Schema<SharingSettingsArgs> {
  @core.attr(String)
  public notebookOutputOption?: string | core.StringOut;

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

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

export interface DefaultResourceSpecArgs extends core.SchemaArgs {
  instanceType?: string | core.StringOut;

  lifecycleConfigArn?: string | core.StringOut;

  sagemakerImageArn?: string | core.StringOut;

  sagemakerImageVersionArn?: string | core.StringOut;
}

export class DefaultResourceSpec extends core.Schema<DefaultResourceSpecArgs> {
  @core.attr(String)
  public instanceType?: string | core.StringOut;

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

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

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

export interface TensorBoardAppSettingsArgs extends core.SchemaArgs {
  defaultResourceSpec: DefaultResourceSpec;
}

export class TensorBoardAppSettings extends core.Schema<TensorBoardAppSettingsArgs> {
  @core.attr(DefaultResourceSpec)
  public defaultResourceSpec!: DefaultResourceSpec;
}

export interface JupyterServerAppSettingsArgs extends core.SchemaArgs {
  defaultResourceSpec: DefaultResourceSpec;

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

export class JupyterServerAppSettings extends core.Schema<JupyterServerAppSettingsArgs> {
  @core.attr(DefaultResourceSpec)
  public defaultResourceSpec!: DefaultResourceSpec;

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

export interface CustomImageArgs extends core.SchemaArgs {
  appImageConfigName: string | core.StringOut;

  imageName: string | core.StringOut;

  imageVersionNumber?: number | core.NumberOut;
}

export class CustomImage extends core.Schema<CustomImageArgs> {
  @core.attr(String)
  public appImageConfigName!: string | core.StringOut;

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

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

export interface KernelGatewayAppSettingsArgs extends core.SchemaArgs {
  customImage?: core.Array<CustomImage> | core.ArrayOut<CustomImage>;

  defaultResourceSpec: DefaultResourceSpec;

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

export class KernelGatewayAppSettings extends core.Schema<KernelGatewayAppSettingsArgs> {
  @core.attr(CustomImage, { kind: "array" })
  public customImage?: core.Array<CustomImage> | core.ArrayOut<CustomImage>;

  @core.attr(DefaultResourceSpec)
  public defaultResourceSpec!: DefaultResourceSpec;

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

export interface UserSettingsArgs extends core.SchemaArgs {
  executionRole: string | core.StringOut;

  jupyterServerAppSettings?: JupyterServerAppSettings;

  kernelGatewayAppSettings?: KernelGatewayAppSettings;

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

  sharingSettings?: SharingSettings;

  tensorBoardAppSettings?: TensorBoardAppSettings;
}

export class UserSettings extends core.Schema<UserSettingsArgs> {
  @core.attr(String)
  public executionRole!: string | core.StringOut;

  @core.attr(JupyterServerAppSettings)
  public jupyterServerAppSettings?: JupyterServerAppSettings;

  @core.attr(KernelGatewayAppSettings)
  public kernelGatewayAppSettings?: KernelGatewayAppSettings;

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

  @core.attr(SharingSettings)
  public sharingSettings?: SharingSettings;

  @core.attr(TensorBoardAppSettings)
  public tensorBoardAppSettings?: TensorBoardAppSettings;
}

export interface UserProfileArgs extends core.ResourceArgs {
  domainId: string | core.StringOut;

  singleSignOnUserIdentifier?: string | core.StringOut;

  singleSignOnUserValue?: string | core.StringOut;

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

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

  userProfileName: string | core.StringOut;

  userSettings?: UserSettings;
}

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

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

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

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

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

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

  @core.attr(UserSettings)
  public userSettings?: UserSettings;

  constructor(name: string, args?: UserProfileArgs) {
    super(name, "aws_sagemaker_user_profile", args);
  }

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