import {S3} from "aws-sdk";
import {ManagedUpload} from "aws-sdk/clients/s3";
import {Part} from "multiparty";
import {File} from "../entity/file";

export class AmazonManager {

  private s3 = new S3({
    region: 'eu-north-1',
    accessKeyId: process.env.CENOS_SUPPORT_AMAZON_ACCESS_KEY_ID,
    secretAccessKey: process.env.CENOS_SUPPORT_AMAZON_SECRET_ACCESS_KEY
  });

  public async uploadFile(file: Part, fileName: string): Promise<ManagedUpload.SendData> {
    return this.s3.upload({
      Bucket: process.env.CENOS_SUPPORT_AMAZON_BUCKET,
      Key: fileName,
      Body: file,
      ContentType: file.headers['content-type'],
      ContentLength: file.byteCount
    }).promise();
  }

  public getFile(fileName: string) {
    return this.s3.getObject({
      Bucket: process.env.CENOS_SUPPORT_AMAZON_BUCKET,
      Key: fileName
    });
  }

  public async getFileData(fileName: string): Promise<S3.Types.HeadObjectOutput> {
    return this.s3.headObject({
      Bucket: process.env.CENOS_SUPPORT_AMAZON_BUCKET,
      Key: fileName
    }).promise();
  }

}

export default new AmazonManager();
