import { Injectable } from '@nestjs/common';
import { S3 } from 'aws-sdk';
import { ManagedUpload } from 'aws-sdk/clients/s3';
import { AWSError } from 'aws-sdk/lib/error';
import { Request } from 'aws-sdk/lib/request';

@Injectable()
export class S3Service {
  public readonly s3 = new S3({
    region: process.env['CENOS_SUPPORT_AMAZON_REGION'],
    accessKeyId: process.env['CENOS_SUPPORT_AMAZON_ACCESS_KEY_ID'],
    secretAccessKey: process.env['CENOS_SUPPORT_AMAZON_SECRET_ACCESS_KEY'],
  });

  getObject(key: string): Request<S3.Types.GetObjectOutput, AWSError> {
    return this.s3.getObject({
      Bucket: process.env['CENOS_SUPPORT_AMAZON_BUCKET'],
      Key: key,
    });
  }

  headObject(key: string): Request<S3.Types.HeadObjectOutput, AWSError> {
    return this.s3.headObject({
      Bucket: process.env['CENOS_SUPPORT_AMAZON_BUCKET'],
      Key: key,
    });
  }

  upload(key: string, body: S3.Body): ManagedUpload {
    return this.s3.upload({
      Bucket: process.env['CENOS_SUPPORT_AMAZON_BUCKET'],
      Key: key,
      Body: body,
    });
  }

  deleteObject(key: string): Request<S3.Types.DeleteObjectOutput, AWSError> {
    return this.s3.deleteObject({
      Bucket: process.env['CENOS_SUPPORT_AMAZON_BUCKET'],
      Key: key,
    });
  }
}
