import fs from 'fs';
import * as path from "path";
import util from 'util';
import multiparty from 'multiparty';

import express from "express";
import {StreamFileFromStorageWorkflow} from "../bl/file/stream-file-from-storage.workflow";
import {File} from "../entity/file";

import storage from '../storage';
import amazon from "../storage/amazon";
import {Response} from "./classes/response";

const router = express.Router();
const readFileAsync = util.promisify(fs.readFile);

router.post('/', async (req: express.Request, res: express.Response, next) => {
  // console.log('file received', req.files);
  // const data = await readFileAsync((req.files.file as any).path);
  // console.log('file read', data);
  // await storage.uploadFile(data);
  const form = new multiparty.Form();

  form.on('part', async (part) => {
    console.log('part received');
    try {
      const result = await storage.uploadFile(part, part.filename);
      console.log('result', result);
    } catch (e) {
      console.log('aa', e);
      next(e);
    }
    res.send();
  });

  form.parse(req);
});

router.get('/:fileName', async (req: express.Request, res: express.Response, next) => {
  try {
    await StreamFileFromStorageWorkflow.stream(req.params['fileName'], res);
  } catch (e) {
    next(e);
  }
});

export default router;
