import fs from 'fs'
import path from 'path'
import { minify } from 'terser'

const errorPages = ['404', '500', '1000', 'broken', 'error', 'js-challenge', 'not-allowed', 'rate-limit']

export const copyErrorPages = () => {
  errorPages.forEach((errorPage) => {
    const sourcePath = path.join('_site', errorPage, 'index.html')
    const destinationPath = path.join('_site', `${errorPage}.html`)
    const directoryPath = path.join('_site', errorPage)

    fs.copyFile(sourcePath, destinationPath, (err) => {
      if (err) {
        console.error(`Error copying ${errorPage} page:`, err)
        return
      }

      fs.unlink(sourcePath, (unlinkErr) => {
        if (unlinkErr) {
          console.error(`Error deleting source file for ${errorPage} page:`, unlinkErr)
          return
        }

        fs.rmdir(directoryPath, (rmdirErr) => {
          if (rmdirErr) console.error(`Error removing directory for ${errorPage} page:`, rmdirErr)
        })
      })
    })
  })
}

export const minifyJsComponents = async () => {
  const scriptsDir = '_site/assets/scripts'

  const minifyJsFilesInDir = async (dir) => {
    const files = fs.readdirSync(dir)
    for (const fileName of files) {
      const filePath = path.join(dir, fileName)
      const stat = fs.statSync(filePath)

      if (stat.isDirectory()) {
        await minifyJsFilesInDir(filePath)
      } else if (fileName.endsWith('.js')) {
        const fileContent = fs.readFileSync(filePath, 'utf8')
        const minified = await minify(fileContent)
        if (minified.error) {
          console.error(`Error minifying ${filePath}:`, minified.error)
        } else {
          fs.writeFileSync(filePath, minified.code)
        }
      } else {
        console.log(`No .js files to minify in ${filePath}`)
      }
    }
  }

  await minifyJsFilesInDir(scriptsDir)
}