/**
 * This file is responsible for updating the README file with file links and descriptions.
 * It reads the files in the specified directory, extracts their descriptions, and generates
 * markdown links for each file. Then, it updates the README file with the generated links
 * and descriptions.
 */
import fs from 'fs';
import path from 'path';

const resolvedPath = path.resolve();
console.log(resolvedPath);

const utilsDir = path.join(resolvedPath, 'src/utils');
const bookmarkletsDir = path.join(resolvedPath, 'src/bookmarklets');
const readmePath = path.join(resolvedPath, 'README.md');

fs.readdir(utilsDir, (err, files) => {
  function readDirectory(dir) {
    const files = fs.readdirSync(dir);
    const fileLinks = [];

    files.forEach(file => {
      const filePath = path.join(dir, file);
      const stats = fs.statSync(filePath);

      if (stats.isFile()) {
        const fileContent = fs.readFileSync(filePath, 'utf8');
        const description = getFileDescription(fileContent);
        fileLinks.push(
          `## [${file}](${path.relative(resolvedPath, filePath)})\n${description}`
        );
      } else if (stats.isDirectory()) {
        fileLinks.push(...readDirectory(filePath));
      }
    });

    return fileLinks;
  }

  const directories = [utilsDir, bookmarkletsDir]; // Add more directories as needed
  let fileLinks = [];

  directories.forEach(dir => {
    fileLinks.push(...readDirectory(dir));
  });

  const readmeContent = fs.readFileSync(readmePath, 'utf8');
  let updatedReadmeContent = updateReadmeContent(readmeContent, fileLinks);
  fs.writeFileSync(readmePath, updatedReadmeContent, 'utf8');

  console.log('README updated successfully!');
});

function getFileDescription(fileContent) {
  // Extract the description from the function comment in the file
  // You can use regular expressions or any other method to extract the description
  // Replace the following line with your implementation
  const descriptionRegex = /\/\*(.*?)\*\//s;
  const match = fileContent.match(descriptionRegex);
  const description = match
    ? match[1].trim().replace(/^\s*\* ?/gm, '')
    : 'No Description Provided'; // const description = match ? match[1].trim().replace(/^\*/gm, '') : 'No Description Provided';
  return description;
}

function updateReadmeContent(readmeContent, fileLinks) {
  const readmeSummaryIndex = readmeContent.indexOf('# File Summary');
  if (readmeSummaryIndex !== -1) {
    // If '# File Summary' is found, keep everything before it
    readmeContent = readmeContent.slice(0, readmeSummaryIndex);
  } // Append the new '# File Summary' section
  readmeContent += '# File Summary\n\n' + fileLinks.join('\n\n');
  return readmeContent;
}
