const fs = require('fs')

const color = require('./../../build/css/tw-extend/color')

/**
 *
 * Generates a JS file with all the custom tailwind color classes
 *
 * @param {string} file
 * Name of file to be created
 */
function writeJsFile(file: string) {
  const backgrounds = Object.keys(color).filter((x) => x.includes('background-'))
  const borders = Object.keys(color).filter((x) => x.includes('border-'))
  const texts = Object.keys(color).filter((x) => x.includes('foreground-'))
  const colors = Object.keys(color).filter(
    (x) =>
      !x.includes('foreground-') &&
      !x.includes('background-') &&
      !x.includes('border-') &&
      !x.includes('colors-') &&
      !x.includes('variables-')
  )
  const palletes = Object.keys(color).filter((x) => x.includes('colors-'))

  // console.log('Example tailwind classes: ')

  function santizieDefaults(x: string) {
    // console.log(x)
    let value = x
    value = value.replace('-DEFAULT', '')
    value = value.replace('background', 'bg')
    value = value.replace('foreground', 'text')
    value = value.replace('colors-', 'bg-')
    value = value.toLowerCase()
    return value
  }

  const result = {
    background: [...backgrounds.map((x) => santizieDefaults(x))],
    border: [...borders.map((x) => santizieDefaults(x))],
    text: [...texts.map((x) => santizieDefaults(x))],
    colors: [...colors.map((x) => `bg-${santizieDefaults(x)}`)],
    palletes: [...palletes.map((x) => santizieDefaults(x))],
  }

  const fileContent = `export default ${JSON.stringify(result, null, 2)};\n`

  fs.writeFileSync(file, fileContent)

  console.log('saved example color classes to : ', file)
}

writeJsFile('./src/lib/tailwind-demo-classes.ts')

// example output
// ./src/lib/tailwind-demo-classes.js

// module.exports = {
//   "background": [
//     "bg",
//     "bg-selection",
//     //..
//   ],
//   "border": [
//     "border",
//     "border-muted",
//     //..
//   ],
//   "text": [
//     "text",
//     "text-strong",
//     //..
//   ],
//   "colors": [
//     "bg-destructive-200",
//     "bg-destructive-300",
//     //..
//   ],
//   "palletes": [
//     "bg-black",
//     "bg-white",
//     //..
//   ]
// }
