import fs from "fs/promises";
import path from "path";

import matter from "gray-matter";
import { serialize } from "next-mdx-remote/serialize";

const BASE_PATH = "content";

export async function getSectionNamesForPage(page: string) {
  const sectionDir = path.join(BASE_PATH, page);
  return (await fs.readdir(sectionDir))
    .filter((name) => name.endsWith(".md"))
    .map((name) => name.slice(0, -".md".length));
}

export async function getSectionsForPage(page: string) {
  const names = await getSectionNamesForPage(page);
  const sections = await Promise.all(
    names.map(async (name) => ({
      name,
      data: await getSectionForPage(page, name),
    }))
  );

  return sections.sort((a, b) => a.data.index - b.data.index);
}

export async function getSectionForPage(page: string, section: string) {
  const raw = await fs.readFile(
    path.join(BASE_PATH, page, `${section}.md`),
    "utf-8"
  );
  const { content, data } = matter(raw);

  return {
    content: await serialize(content),
    title: data.title as string,
    index: data.index as number,
  };
}
