async function fileUploadProgress(request, response, next) {
  let progress = 0;
  const fileSize = request.headers["content-length"]
    ? parseInt(request.headers["content-length"])
    : 0;

  // Note(tcarambat): While this is chunked it does not stream back to the UI for some reason.
  // It just waits for the entire requests to finish. Likely because it is not using EventSource on frontend
  // which is limited to GET.
  // TODO: Someone smarter than me add streaming here to report back real-time progress.
  response.writeHead(200);
  request.on("data", (chunk) => {
    progress += chunk.length;
    const percentage = (progress / fileSize) * 100;
    response.write(`${JSON.stringify({ progress, fileSize, percentage })}\n`);
    if (progress >= fileSize) {
      response.end();
    }
  });

  next();
}

module.exports = {
  fileUploadProgress,
};