import { NextApiRequest, NextApiResponse } from "next";

import aws from "aws-sdk";

const { BUCKET, ACCESS_KEY, SECRET_KEY, ENDPOINT, REGION } = process.env;

export default async function (req: NextApiRequest, res: NextApiResponse) {
  aws.config.s3 = {
    accessKeyId: ACCESS_KEY,
    secretAccessKey: SECRET_KEY,
    region: REGION,
    endpoint: ENDPOINT,
    signatureVersion: "v4",
  };

  let isTruncated: boolean | undefined = true;
  let startAfter;

  let objects = 0;
  let size = 0;

  const s3 = new aws.S3();

  while (isTruncated) {
    let params: any = { Bucket: BUCKET };

    if (startAfter) {
      params.StartAfter = startAfter;
    }
    const data = await s3.listObjectsV2(params).promise();

    data.Contents?.forEach((object: any) => {
      objects++;
      size += object.Size! / 1024 / 1024 / 1024;
    });

    isTruncated = data.IsTruncated;
    if (isTruncated) {
      startAfter = data.Contents!.slice(-1)[0].Key;
    }
  }
  res.setHeader(
    "Cache-Control",
    "public, s-maxage=10, stale-while-revalidate=59"
  );
  res.json({ object: objects, size: Number(size.toFixed(2)) });
}