import { readFileSync, writeFileSync } from 'node:fs';
import remarkGfm from 'remark-gfm';
import remarkParse from 'remark-parse';
import { unified } from 'unified';
import { visit } from 'unist-util-visit';

import { SPLIT } from './const';

export const updateDocs = (path: string, content: string) => {
  const md = readFileSync(path, 'utf8');
  const mds = md.split(SPLIT);
  mds[1] = [' ', content, ' '].join('\n\n');
  const result = mds.join(SPLIT);
  writeFileSync(path, result, 'utf8');
};

export const convertMarkdownToMdast = async (md: string) => {
  // @ts-ignore
  return unified().use(remarkParse).use(remarkGfm).parse(md.trim());
};

export const getTitle = async (path: string) => {
  const md = readFileSync(path, 'utf8');
  const mdast: any = await convertMarkdownToMdast(md);

  let title = '';
  visit(mdast, 'heading', (node) => {
    if (node.depth !== 1) return;
    visit(node, 'text', (heading) => {
      title += heading.value;
    });
  });
  return title;
};

export const genMdLink = (title: string, url: string) => {
  return `[${title}](${url})`;
};