var aws = require("aws-sdk");
require("dotenv").config();
// Configure aws with your accessKeyId and your secretAccessKey
aws.config.update({
  region: "ca-central-1", // Put your aws region here
  accessKeyId: process.env.AWSAccessKeyId,
  secretAccessKey: process.env.AWSSecretKey
});

const S3_BUCKET = process.env.Bucket;
// Now lets export this function so we can call it from somewhere else

exports.sign_s3 = (req, res) => {
  console.log("Get S3 Signed Put for bucket: " + S3_BUCKET);
  const s3 = new aws.S3(); // Create a new instance of S3
  // if (!req.body.fileName || req.body.fileType) {
  //   console.log('req.body.fileName', req.body.fileName)
  //   console.log('req.body.fileType', req.body.fileType)
  //   res.json({ success: false, error: "fileName or fileType missing." });
  //   console.log("Error: fileName or fileType missing. ");
  //   return;
  // }
  const fileName = req.body.fileName;
  const fileType = req.body.fileType;
  // Set up the payload of what we are sending to the S3 api
  const s3Params = {
    Bucket: S3_BUCKET,
    Key: fileName,
    Expires: 500,
    ContentType: fileType,
    ACL: "public-read"
  };
  // Make a request to the S3 API to get a signed URL which we can use to upload our file
  s3.getSignedUrl("putObject", s3Params, (err, data) => {
    if (err) {
      console.log(err);
      res.json({ success: false, error: err });
    }
    // Data payload of what we are sending back, the url of the signedRequest and a URL where we can access the content after its saved.
    const returnData = {
      signedRequest: data,
      url: `https://${S3_BUCKET}.s3.amazonaws.com/${fileName}`
    };
    // Send it all back
    res.json({ success: true, data: { returnData } });
  });
};

exports.get_s3 = (req, res) => {
  const s3 = new aws.S3(); // Create a new instance of S3
  const fileName = req.body.fileName;
  //const fileType = req.body.fileType;
  // Set up the payload of what we are sending to the S3 api
  const s3Params = {
    Bucket: S3_BUCKET,
    Key: fileName,
    Expires: 500
  };
  // Make a request to the S3 API to get a signed URL which we can use to upload our file
  s3.getSignedUrl("getObject", s3Params, (err, data) => {
    if (err) {
      console.log(err);
      res.json({ success: false, error: err });
    }
    // Data payload of what we are sending back, the url of the signedRequest and a URL where we can access the content after its saved.
    const returnData = {
      signedRequest: data,
      url: `https://${S3_BUCKET}.s3.amazonaws.com/${fileName}`
    };
    // Send it all back
    res.json({ success: true, data: { returnData } });
  });
};

exports.delete_s3 = (req, res) => {
  const s3 = new aws.S3(); // Create a new instance of S3
  const fileName = req.body.fileName;
  //const fileType = req.body.fileType;
  // Set up the payload of what we are sending to the S3 api
  console.log("fileName", req.body);
  const s3Params = {
    Bucket: S3_BUCKET,
    Key: fileName
  };

  s3.deleteObject(s3Params, function(err, data) {
    if (err) {
      res.json({ success: false, message: err.message });
    }
    // error
    else {
      res.json({ success: true, data });
    } // deleted
  });
};
