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

export interface ContentConfigPermissionsArgs extends core.SchemaArgs {
  access?: core.Array<string> | core.ArrayOut<core.StringOut>;

  grantee?: string | core.StringOut;

  granteeType?: string | core.StringOut;
}

export class ContentConfigPermissions extends core.Schema<ContentConfigPermissionsArgs> {
  @core.attr(String, { kind: "array" })
  public access?: core.Array<string> | core.ArrayOut<core.StringOut>;

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

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

export interface ThumbnailConfigArgs extends core.SchemaArgs {
  bucket?: string | core.StringOut;

  storageClass?: string | core.StringOut;
}

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

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

export interface NotificationsArgs extends core.SchemaArgs {
  completed?: string | core.StringOut;

  error?: string | core.StringOut;

  progressing?: string | core.StringOut;

  warning?: string | core.StringOut;
}

export class Notifications extends core.Schema<NotificationsArgs> {
  @core.attr(String)
  public completed?: string | core.StringOut;

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

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

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

export interface ContentConfigArgs extends core.SchemaArgs {
  bucket?: string | core.StringOut;

  storageClass?: string | core.StringOut;
}

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

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

export interface ThumbnailConfigPermissionsArgs extends core.SchemaArgs {
  access?: core.Array<string> | core.ArrayOut<core.StringOut>;

  grantee?: string | core.StringOut;

  granteeType?: string | core.StringOut;
}

export class ThumbnailConfigPermissions extends core.Schema<ThumbnailConfigPermissionsArgs> {
  @core.attr(String, { kind: "array" })
  public access?: core.Array<string> | core.ArrayOut<core.StringOut>;

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

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

export interface PipelineArgs extends core.ResourceArgs {
  awsKmsKeyArn?: string | core.StringOut;

  contentConfig?: ContentConfig;

  contentConfigPermissions?:
    | core.Array<ContentConfigPermissions>
    | core.ArrayOut<ContentConfigPermissions>;

  inputBucket: string | core.StringOut;

  name?: string | core.StringOut;

  notifications?: Notifications;

  outputBucket?: string | core.StringOut;

  role: string | core.StringOut;

  thumbnailConfig?: ThumbnailConfig;

  thumbnailConfigPermissions?:
    | core.Array<ThumbnailConfigPermissions>
    | core.ArrayOut<ThumbnailConfigPermissions>;
}

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

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

  @core.attr(ContentConfig, { computed: true })
  public contentConfig?: ContentConfig;

  @core.attr(ContentConfigPermissions, { kind: "array" })
  public contentConfigPermissions?:
    | core.Array<ContentConfigPermissions>
    | core.ArrayOut<ContentConfigPermissions>;

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

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

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

  @core.attr(Notifications)
  public notifications?: Notifications;

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

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

  @core.attr(ThumbnailConfig, { computed: true })
  public thumbnailConfig?: ThumbnailConfig;

  @core.attr(ThumbnailConfigPermissions, { kind: "array" })
  public thumbnailConfigPermissions?:
    | core.Array<ThumbnailConfigPermissions>
    | core.ArrayOut<ThumbnailConfigPermissions>;

  constructor(name: string, args?: PipelineArgs) {
    super(name, "aws_elastictranscoder_pipeline", args);
  }

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