"use strict";



//  U T I L S

const idRegex = /(".*")/g;
const numberRegex = /^[0-9]/g;
const renderedHeaderRegex = /(<h\d\sid.*h\d>)/g;
const titleRegex = /(>.*<)/g;



//  E X P O R T

export default (state, emit, markdown) => {
  const collectionOfTocElements = [];
  const tocElements = markdown.match(renderedHeaderRegex);

  for (const item of tocElements) {
    const id = item.match(idRegex)[0].replace(/"/g, "");
    const title = item.match(titleRegex)[0].replace(">", "").replace("<", "");

    collectionOfTocElements.push(`
      <li>
        <a href="${slugify(id)}" title="Go to '${title}'">${title}</a>
      </li>
    `);
  }

  return `
    <ul class="component--glossary-toc">
      ${collectionOfTocElements.join("")}
    </ul>
  `;
};



//  H E L P E R

function slugify(stringToSlugify) {
  let finalString = stringToSlugify
    .toLowerCase()
    .replace(/###\s/g, "")
    .replace(/\s\/\s/g, "-")
    .replace(/\s/g, "-")
    .replace(/%/g, "")
    .replace(/\(/g, "")
    .replace(/\)/g, "")
    .replace(/,/g, "");

  if (finalString.match(numberRegex))
    finalString = `_${finalString}`;

  return `#${finalString}`;
}
