import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
import multer from 'multer';
import { v4 as uuidv4 } from 'uuid';
import { declareHandler } from '../server-utils/routesHandler.js';
import { convertWebmToMP4 } from '../signal-processing/conversions.js';

const s3 = new S3Client({ region: 'us-east-1' });

const upload: any = multer({ limits: { fieldSize: Math.pow(10, 8) } }); // 100mb limit

export const uploadVideo = declareHandler({
  middleware: upload.single('file'),
  func: async (req, res) => {
    const authorId = req.user.id;
    const buffer = req.file.buffer;
    const projectName = req.body.name;
    const fileUuid = uuidv4();
    const mp4Buffer = await convertWebmToMP4(buffer);
    const s3Key = `${authorId}/${fileUuid}.mp4`;
    await s3.send(
      new PutObjectCommand({
        Bucket: 'user-vids',
        Key: s3Key,
        Body: mp4Buffer,
        ContentDisposition: `attachment; filename=${projectName}.mp4`,
      })
    );
    res.send({
      success: true,
      url: `https://user-vids.s3.amazonaws.com/${s3Key}`,
    });
  },
});

export default uploadVideo;
