require('dotenv').config();
const S3 = require('aws-sdk/clients/s3');
const fs = require('fs');
const { apiResponse} = require("../../core/response/response")
const { SUCCESS, REDIRECTION, CLIENT_ERROR, SERVER_ERROR } = require("../../core/response/statusCode")
const {ERROR_MSG, SUCCESS_MSG} = require("../../core/response/messages")
export {};
import Path  from "path";

// aws common variables
const accessKeyId= process.env.AWS_ACCESS_KEY_ID;
const secretAccesskey= process.env.AWS_SECRET_ACCESS_KEY;
const region =process.env.AWS_REGION;
const bucket_name =process.env.AWS_BUCKET_NAME;

// used for s3
const s3 = new S3({
    region,
    accessKeyId,
    secretAccesskey,
}) 

exports.uploadFile = async(req, res) => {
    try
    {

        let lang = req.headers["accept-language"] || 'en'
        let promises=[];
        console.log(req.files , "----------- files in the s3 function --------");
            for(let i=0;i<req.files.length;i++){
                let file = req.files[i];
                let uploadFile = await uploadLoadToS3(file);


                await promises.push({
                    file_name : file.originalname,
                    file_type : file.mimetype,
                     Location : uploadFile.Location,
                    document_date:new Date()});

                fs.unlink(Path.resolve(file.path), function (err) {
                    console.log(err , 'Unlink file error')
                    if (err) throw err;
                }); 
            }
            Promise.all(promises).then(function(data){
                
                return apiResponse(res, true, [], '', SUCCESS.OK, 0, data,req);
                // res.send('Uploadedd');
            }).catch(function(err){
                console.log(err)
                return apiResponse(res, false, [], ERROR_MSG[`SYSTEM-ERROR-${lang}`], SERVER_ERROR.internalServerError, 0, [],req);
                // res.send(err.stack);
            }) 
    }
    catch(error)
    {
        console.log(error);
        throw new Error(error);
    }
}

async function uploadLoadToS3(ObjFile){
    const filestream = fs.createReadStream(ObjFile.path);
    const params = {
        Bucket: bucket_name,
        Key: 'common/'+ObjFile.filename, // File name you want to save as in S3
        Body: filestream,
        ContentEncoding: 'base64',
        ContentType: ObjFile.mimetype,
        ACL:'public-read'
    }
    let result = await s3.upload(params).promise();
    return result;
}