export default function createTemplateLiteral(templateStrings, ...expressionKeys) {

    return (dummyTemplateStrings, ...expressionValues)=>{

        let resultString = [templateStrings[0]];
        expressionKeys.forEach(function(expressionKey, i) {
            let expressionValue = expressionValues[i];
            let nextTemplateString = templateStrings[i+1];
            if(expressionValue===null || expressionValue === undefined || expressionValue === ""){
                nextTemplateString = nextTemplateString.replace(/^_/, '');
            }
            resultString.push(expressionValue, nextTemplateString);
        });

        let resultStr = resultString.join('');
        resultStr = resultStr.replace(/_$/,'');
        return resultStr;
    };
}



/* refer the doc https://developers.google.com/web/updates/2015/01/ES6-Template-Strings

UnderSatnd the terms - String interpolation, Embedded expressions

Go through the topic https://developers.google.com/web/updates/2015/01/ES6-Template-Strings#tagged_templates

Things to note fn`Hello ${you}! You're looking ${adjective} today!` desugars to fn(["Hello ", "! You're looking ", " today!"], you, adjective);

Please go through the example code

Our implementation constructCustomMessage is the handler for the tagged template function. 
It receives the static words and its substitutions as seen above as the arguments.

It returns a function that receives the values for the substitutions. Upon passing the values for the inner function
it executes the algorithm as mentioned in the doc to construct the final message.
"The (n + 1)th argument corresponds to the substitution that takes place between the nth and (n + 1)th entries in the string array"


function constructCustomMessage(staticWordsList, ...embeddedExpressionKeyList)
{
    return (...valuesForEmbeddedExpressionList)=>{

        let finalMessage = staticWordsList[0];
        embeddedExpressionKeyList.forEach(function(expressionKey, index) {
            let expressionValue = valuesForEmbeddedExpressionList[index];
            let nextStaticWord = staticWordsList[index+1];
            if(expressionValue===null || expressionValue === undefined || expressionValue === ""){
               // Replace the underscore '_' present at the beginning of string with empty value.  
                    nextStaticWord = nextStaticWord.replace(/^_/, '');
            }
             finalMessage += expressionValue + nextStaticWord;

        });
          // Replace the underscore '_' present at the end of string with empty value.  
         finalMessage = finalMessage.replace(/_$/,'');
        return finalMessage ;
    };

}
*/

/*
Sample Invocation Format

var username;
var tag;
var handlerFunctiontoFormMessage = constructCustomMessage`<b>${username} says</b>: "${tag}"`;
var outputString = handlerFunctiontoFormMessage('Mani Venkat', '& is a fun tag');
console.log(outputString);

*/
