import nunjucks from 'nunjucks';

const babelPluginNunjucks = ({ types: t }) => {
    return {
        pre(state) {
            const options = state.opts.plugins[0].options;
            this.njkenv = new nunjucks.Environment(new nunjucks.FileSystemLoader(options.templatesFolder));
            if (options.globals) {
                for (const { name, value } of options.globals) {
                    this.njkenv.addGlobal(name, value);
                }
            }
        },
        visitor: {
            TaggedTemplateExpression(path) {
                if (path.get('tag').isIdentifier({ name: 'njk' })) {
                    const render = this.njkenv.renderString(path.node.quasi.quasis[0].value.raw);
                    path.replaceWith(t.stringLiteral(render));
                }
            },
        },
    };
};

export default babelPluginNunjucks;
