// Copyright © onWidget <https://github.com/onwidget>
// SPDX-License-Identifier: MIT
import getReadingTime from "reading-time";
import { toString } from "mdast-util-to-string";
import { visit } from "unist-util-visit";
import type { RehypePlugin, RemarkPlugin } from "@astrojs/markdown-remark";

export const readingTimeRemarkPlugin: RemarkPlugin = () => {
    return function (tree, file) {
        const textOnPage = toString(tree);
        const readingTime = Math.ceil(getReadingTime(textOnPage).minutes);

        if (typeof file?.data?.astro?.frontmatter !== "undefined") {
            file.data.astro.frontmatter.readingTime = readingTime;
        }
    };
};

export const responsiveTablesRehypePlugin: RehypePlugin = () => {
    return function (tree) {
        if (!tree.children) {
            return;
        }

        for (let i = 0; i < tree.children.length; i++) {
            const child = tree.children[i];

            if (child.type === "element" && child.tagName === "table") {
                tree.children[i] = {
                    type: "element",
                    tagName: "div",
                    properties: {
                        style: "overflow:auto",
                    },
                    children: [child],
                };

                i++;
            }
        }
    };
};

export const lazyImagesRehypePlugin: RehypePlugin = () => {
    return function (tree) {
        if (!tree.children) {
            return;
        }

        visit(tree, "element", function (node) {
            if (node.tagName === "img") {
                node.properties.loading = "lazy";
            }
        });
    };
};
