const errorHandling                    = require('../../utils/errorHandling');
const { requiredFields, generalError } = require('../../config/errors');

/** 
 * @description Convertis des °C en °F et l'inverse aussi.
 * @param {Number} degree - Nombre de degrès
 * @param {String} unit - Unité du nombre (°C ou °F)
 * @returns {Object} false si arguments non valides et sinon un objet contenant la string et le nombre résultat
 * @examples convertTemperature(23, '°C') → { resultNumber: 73.4, resultString: "73.4 °F" }
 */
function convertTemperature(degree, unit) {
    let temperatureValue = 0;
    let temperatureUnit;
    if (unit === "°C") {
        temperatureUnit = "°F";
        temperatureValue = ((degree * 9/5) + 32);
    }
    else if (unit === "°F") {
        temperatureUnit = "°C";
        temperatureValue = (degree - 32) * 5/9;
    }
    else {
        return false;
    }
    return {
        resultNumber: temperatureValue,
        resultString: `${temperatureValue} ${temperatureUnit}`
    };
} 

/* OUTPUTS */
exports.convertTemperatureOutput = ({ res, next }, argsObject) => {
    let { degree, unit } = argsObject;
    
    // S'il n'y a pas les champs obligatoire
    if (!(degree && unit)) {
        return errorHandling(next, requiredFields);
    }
    
    // Si ce n'est pas un nombre
    degree = parseInt(degree);
    if (isNaN(degree)) {
        return errorHandling(next, { message: "Veuillez rentré un nombre valide.", statusCode: 400 });
    }

    const result = convertTemperature(degree, unit);
    if (!result) {
        return errorHandling(next, generalError);
    }

    return res.status(200).json(result);
}