package com.mitchellbosecke.benchmark;

import java.util.Map;

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Setup;
import org.trimou.engine.MustacheEngineBuilder;
import org.trimou.engine.config.EngineConfigurationKey;
import org.trimou.engine.locator.ClassPathTemplateLocator;
import org.trimou.engine.resolver.CombinedIndexResolver;
import org.trimou.handlebars.BasicValueHelper;
import org.trimou.handlebars.HelpersBuilder;
import org.trimou.handlebars.Options;

public class Trimou extends BaseBenchmark {

    private Map<String, Object> context;

    private org.trimou.Mustache template;

    @Setup
    public void setup() {
        template = MustacheEngineBuilder.newBuilder()
                // Disable HTML escaping
                .setProperty(EngineConfigurationKey.SKIP_VALUE_ESCAPING, true)
                // Disable useless resolver
                .setProperty(CombinedIndexResolver.ENABLED_KEY, false)
                .addTemplateLocator(ClassPathTemplateLocator.builder(1).setRootPath("templates").setScanClasspath(false).setSuffix("trimou.html").build())
                .registerHelpers(HelpersBuilder.extra().build())
                // This is a single purpose helper
                // It's a pity we can't use JDK8 extension and SimpleHelpers util class
                .registerHelper("minusClass", new BasicValueHelper() {
                    @Override
                    public void execute(Options options) {
                        Object value = options.getParameters().get(0);
                        if (value instanceof Double && (Double) value < 0) {
                            options.append(" class=\"minus\"");
                        }
                        // We don't handle any other number types
                    }
                }).build().getMustache("stocks");
        this.context = getContext();
    }

    @Benchmark
    public String benchmark() {
        return template.render(context);
    }

}