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

export interface BucketObjectArgs extends core.ResourceArgs {
  acl?: string | core.StringOut;

  bucket: string | core.StringOut;

  bucketKeyEnabled?: boolean | core.BooleanOut;

  cacheControl?: string | core.StringOut;

  content?: string | core.StringOut;

  contentBase64?: string | core.StringOut;

  contentDisposition?: string | core.StringOut;

  contentEncoding?: string | core.StringOut;

  contentLanguage?: string | core.StringOut;

  contentType?: string | core.StringOut;

  etag?: string | core.StringOut;

  forceDestroy?: boolean | core.BooleanOut;

  key: string | core.StringOut;

  kmsKeyId?: string | core.StringOut;

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

  objectLockLegalHoldStatus?: string | core.StringOut;

  objectLockMode?: string | core.StringOut;

  objectLockRetainUntilDate?: string | core.StringOut;

  serverSideEncryption?: string | core.StringOut;

  source?: string | core.StringOut;

  sourceHash?: string | core.StringOut;

  storageClass?: string | core.StringOut;

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

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

  websiteRedirect?: string | core.StringOut;
}

export class BucketObject extends core.Resource<BucketObjectArgs> {
  @core.attr(String)
  public acl?: string | core.StringOut;

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

  @core.attr(Boolean, { computed: true })
  public bucketKeyEnabled?: boolean | core.BooleanOut;

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

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

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

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

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

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

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

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

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

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

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

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

  @core.attr(String, { kind: "map" })
  public metadata?: core.Map<string, string> | core.MapOut<core.StringOut>;

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

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

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

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

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

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

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

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

  constructor(name: string, args?: BucketObjectArgs) {
    super(name, "aws_s3_bucket_object", args);
  }

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