import React from 'react';
import useTOCHighlight from '@theme/hooks/useTOCHighlight';

const LINK_CLASS_NAME = 'table-of-contents__link';
const ACTIVE_LINK_CLASS_NAME = 'table-of-contents__link--active';
const TOP_OFFSET = 100;
/* eslint-disable jsx-a11y/control-has-associated-label */

function TocTree({ headings, isChild }) {
  if (!headings.length) {
    return null;
  }

  return (
    <ul className={isChild ? 'stack-xs' : 'table-of-contents pt-s stack-xs'}>
      {headings.map((heading) => (
        <li key={heading.id}>
          <a
            href={`#${heading.id}`}
            className={LINK_CLASS_NAME} // Developer provided the HTML, so assume it's safe.
            // eslint-disable-next-line react/no-danger
            dangerouslySetInnerHTML={{
              __html: heading.value,
            }}
          />
          <TocTree isChild headings={heading.children} />
        </li>
      ))}
    </ul>
  );
}

function TOC({ headings }) {
  useTOCHighlight(LINK_CLASS_NAME, ACTIVE_LINK_CLASS_NAME, TOP_OFFSET);
  return <TocTree headings={headings} />;
}

export default TOC;
