const fs = require('fs')

const componentsDirectory = `${__dirname}/../src/components`
const indexFile = `${componentsDirectory}/index.ts`

// Get directories and files in the components directory
const filesAndDirectories = fs.readdirSync(componentsDirectory)

const [files, directories] = filesAndDirectories.reduce(
  (acc, fileOrDirectory) => {
    if (
      fs.statSync(`${componentsDirectory}/${fileOrDirectory}`).isDirectory()
    ) {
      acc[1].push(fileOrDirectory)
    } else {
      acc[0].push(fileOrDirectory)
    }

    return acc
  },
  [[], []],
)

// Write them
fs.writeFileSync(
  indexFile,
  filesAndDirectories
    .reduce((acc, fileOrDirectory) => {
      if (['.DS_Store', 'index.ts'].includes(fileOrDirectory)) {
        return [...acc]
      }

      const componentName = fileOrDirectory.replace('.tsx', '')

      return [...acc, `export { ${componentName} } from './${componentName}'`]
    }, [])
    .join('\n'),
  {
    flag: 'w',
  },
)

console.log(`Rebuilt component index file at ${indexFile}`)