import express from "express"
import fs from "fs"
import path from "path"
import sharp from "sharp"

const image = express.Router();

const resizeImg = async (width: number, height: number, inputimgPath: string, fileName: string): Promise<string> => {
    // output file for resized img
    let outputImg = path.resolve("images/thumb", `${fileName}.jpg`);
    await sharp(path.resolve(inputimgPath))
        .resize(width, height)
        .toFormat("jpeg")
        .jpeg({
            quality: 100,
            mozjpeg: true
        })
        .toFile(path.resolve(outputImg))

    return outputImg
}




image.get('/', async (req: express.Request, res: express.Response): Promise<void> => {
    let fileName = req.query.filename as string;
    let width = parseInt(req.query.width as string);
    let height = parseInt(req.query.height as string);
    
    // fetch file from server
    let inputimgPath: string = path.resolve("images/full", `${fileName}.jpg`);
    

    // check if the inputFile exist
    if (!fs.existsSync(inputimgPath)) {
        res.status(404).send("Image not found");
        return;
    }


    // display image if we have fileName, width, height attributs in the request  
    if (fileName && width && height) {

        //resize image
        let outputImg: string = await resizeImg(width, height, inputimgPath, fileName);
        res.sendFile(outputImg);

    } else if (fileName) {
        // display original image if we only have filename parameter in the request
        res.sendFile(inputimgPath);
    }
})




export default image;