import { mentionRegex } from "pretty-text/mentions";

function addMention(buffer, matches, state) {
  let username = matches[1] || matches[2];
  let tag = "span";
  let className = "mention";

  let token = new state.Token("mention_open", tag, 1);
  token.attrs = [["class", className]];

  buffer.push(token);

  token = new state.Token("text", "", 0);
  token.content = "@" + username;

  buffer.push(token);

  token = new state.Token("mention_close", tag, -1);
  buffer.push(token);
}

export function setup(helper) {
  helper.registerOptions((opts, siteSettings) => {
    opts.features.mentions = !!siteSettings.enable_mentions;
    opts.features.unicodeUsernames = !!siteSettings.unicode_usernames;
  });

  helper.registerPlugin((md) => {
    const rule = {
      matcher: mentionRegex(md.options.discourse.features.unicodeUsernames),
      onMatch: addMention,
    };

    md.core.textPostProcess.ruler.push("mentions", rule);
  });
}
