import { Plugin } from "unified";
import { visit } from "unist-util-visit";

const RE_CHANNEL = /<#([A-z0-9]{26})>/g;

export const remarkChannels: Plugin = () => (tree) => {
  visit(
    tree,
    "text",
    (
      node: { type: "text"; value: string },
      idx,
      parent: { children: unknown[] },
    ) => {
      const elements = node.value.split(RE_CHANNEL);
      if (elements.length === 1) return; // no matches

      const newNodes = elements.map((value, index) => {
        if (index % 2) {
          return {
            type: "link",
            url: `${location.origin}/channel/${value}`,
          };
        }

        return {
          type: "text",
          value,
        };
      });

      parent.children.splice(idx, 1, ...newNodes);
      return idx + newNodes.length;
    },
  );
};
