const hljs = require("highlight.js");

const MAP = {
    py: "python",
    js: "javascript",
    json: "javascript",
    rb: "ruby",
    csharp: "cs"
};

function normalize(lang) {
    if (!lang) {
        return null;
    }

    const lower = lang.toLowerCase();
    return MAP[lower] || lower;
}

/**
 * @param {string} lang
 * @param {string} code
 * @returns {string|{html: boolean, body}}
 */
function highlight(lang, code) {
    if (!lang)
        return {
            body: code,
            html: false
        };

    // Normalize lang
    lang = normalize(lang);

    try {
        return hljs.highlight(code, {
            language: lang
        }).value;
    } catch (e) {
        console.error(e);
    }

    return {
        body: code,
        html: false
    };
}

module.exports = {
    book: {
        assets: "./css",
        css: ["website.css"]
    },
    ebook: {
        assets: "./css",
        css: ["ebook.css"]
    },
    blocks: {
        code: function (block) {
            return highlight(block.kwargs.language, block.body);
        }
    }
};