'use strict';

const { readFileSync, readdirSync, writeFileSync } = require('fs');

// Get all markdown stubs
const header = readFileSync('bundler/header.md', 'utf-8');
const badges = readFileSync('bundler/badges.md', 'utf-8');
const installation = readFileSync('bundler/installation.md', 'utf-8');
const api = readFileSync('bundler/api.md', 'utf-8');
const strictnessAndComparisons = readFileSync('bundler/strictness_and_comparisons.md', 'utf-8');
const notImplemented = readFileSync('bundler/not_implemented.md', 'utf-8');
const contribute = readFileSync('bundler/contribute.md', 'utf-8');
const license = readFileSync('bundler/license.md', 'utf-8');

// Get all API docs
const methods = readdirSync('docs/api', 'utf-8');

// Build table of contents
const tableOfContents = methods.map((file) => {
  const methodName = file.replace('.md', '');

  return `- [${methodName}](#${methodName.toLowerCase()})`;
}).join('\n');

// Build methods "readme"
const methodDocumentation = methods.map((file) => {
  let content = readFileSync(`docs/api/${file}`, 'utf-8');

  const lines = content.split('\n');

  lines[0] = `###${lines[0]}`;
  lines.pop();
  lines.pop();

  content = lines.join('\n');
  content = content.replace(/(\r\n|\r|\n){2,}/g, '$1\n');

  return content;
}).join('\n\n');

writeFileSync(
  'README.md',
  [
    header,
    badges,
    installation,
    api,
    tableOfContents,
    strictnessAndComparisons,
    notImplemented,
    methodDocumentation,
    contribute,
    license,
  ].join('\n\n'),
);