import * as path from "path";

import express from "express";

import {Response} from "../../api/classes/response";
import {File} from "../../entity/file";
import amazon from "../../storage/amazon";

export class StreamFileFromStorageWorkflow {

  public static async stream(fileName: string, res: express.Response) {
    const parsedFileName = path.parse(fileName);
    const fileEntity = File.findOne({publicId: parsedFileName.name});

    if (!fileEntity) {
      Response.buildError('File not found', undefined, 404).send(res);
      return;
    }

    const s3fileData = await amazon.getFileData(fileName);
    const stream = amazon.getFile(fileName).createReadStream();

    res.set('Content-Type', s3fileData.ContentType);
    res.set('Content-Length', s3fileData.ContentLength.toString());

    stream.pipe(res);
  }

}
