import path from "path";
import fs from "fs-extra";
import { cwd } from "./utils/env";

const UPDATE_LOG = "UPDATELOG.md";

// parse the UPDATELOG.md
export async function resolveUpdateLog(tag: string) {
  const reTitle = /^## v[\d\.]+/;
  const reEnd = /^---/;

  const file = path.join(cwd, UPDATE_LOG);

  if (!(await fs.pathExists(file))) {
    throw new Error("could not found UPDATELOG.md");
  }

  const data = await fs.readFile(file).then((d) => d.toString("utf8"));

  const map = {} as Record<string, string[]>;
  let p = "";

  data.split("\n").forEach((line) => {
    if (reTitle.test(line)) {
      p = line.slice(3).trim();
      if (!map[p]) {
        map[p] = [];
      } else {
        throw new Error(`Tag ${p} dup`);
      }
    } else if (reEnd.test(line)) {
      p = "";
    } else if (p) {
      map[p].push(line);
    }
  });

  if (!map[tag]) {
    throw new Error(`could not found "${tag}" in UPDATELOG.md`);
  }

  return map[tag].join("\n").trim();
}
