//TODO: rip shit shit out as soon as psb handles syntax highlighting,
//wtf am I doing fetching the CSS here rather than via a link tag

// setup web worker to avoid causing issues for the rendering thread
async function setup() {
    // start fetching css sooner rather than latter
    const baseCssProm = fetch(
        "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css",
    ).then((res) => res.text());
    const lightCssProm = fetch("/static/css/light-code.css").then((res) =>
        res.text()
    );
    const darkCssProm = fetch("/static/css/dark-code.css").then((res) =>
        res.text()
    );

    const code = document.querySelectorAll("pre.sourceCode");
    const worker = new Worker("/static/js/code_highlighting_worker.mjs");
    worker.onmessage = (event) => {
        const [index, newTxt] = event.data;
        code[index].innerHTML = newTxt;
    };
    for (let i = 0; i < code.length; i++) {
        worker.postMessage([i, code[i].textContent]);
    }
    for (const c of code) {
        c.classList.add("hljs");
    }

    // setting up the css for highlighting with previously fetched css
    const baseStylesheet = new CSSStyleSheet();
    const lightThemeSheet = new CSSStyleSheet();
    const darkThemeSheet = new CSSStyleSheet();

    //shenanigans done to avoid awaiting each promise sequentially
    await Promise.all([
        (async () => {
            return await baseStylesheet.replace(await baseCssProm);
        })(),
        (async () => {
            return await lightThemeSheet.replace(await lightCssProm);
        })(),
        (async () => {
            return await darkThemeSheet.replace(await darkCssProm);
        })(),
    ]);
    document.adoptedStyleSheets.push(baseStylesheet);
    document.adoptedStyleSheets.push(lightThemeSheet);
    document.adoptedStyleSheets.push(darkThemeSheet);
}
addEventListener("load", setup);
if (document.readyState == "complete") await setup();
