import type { TTOCItem } from "@/types/toc.type";
import { JSDOM } from "jsdom";

/**
 * Generate the Table Of Content List by html code.
 * It supports h1-h6 level headings at most.
 * @param htmlCode
 * @returns
 */
export const makeTOCTree = (htmlCode: string) => {
  const doc_dom = new JSDOM(htmlCode);
  const all_headers = doc_dom.window.document.querySelectorAll("h1,h2,h3,h4,h5,h6");
  const result: TTOCItem[] = [];
  for (let i = 0; i < all_headers.length; i++) {
    const level = Number.parseInt(all_headers[i].tagName.replace("H", ""));
    result.push({
      level: level,
      anchorId: all_headers[i].id,
      title: all_headers[i].textContent!,
    });
  }
  return result;
};
