package com.airbnb.chancery;

import com.airbnb.chancery.model.CallbackPayload;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.ISODateTimeFormat;
import org.mvel2.ParserContext;
import org.mvel2.templates.CompiledTemplate;
import org.mvel2.templates.TemplateCompiler;
import org.mvel2.templates.TemplateRuntime;

import javax.annotation.Nonnull;

public class PayloadExpressionEvaluator {
    private final CompiledTemplate compiledTemplate;

    PayloadExpressionEvaluator(@Nonnull String template) {
        if (template == null) {
            System.err.println("wuuut");
        }
        final ParserContext parserContext = new ParserContext();
        parserContext.addImport("iso", ISODateTimeFormat.class);
        parserContext.addImport("dtf", DateTimeFormat.class);
        compiledTemplate = TemplateCompiler.compileTemplate(template, parserContext);
    }

    public final String evaluateForPayload(@Nonnull CallbackPayload payload) {
        return (String) TemplateRuntime.execute(compiledTemplate, payload);
    }
}