text: 'use strict'
  
  process.env.NODE_ENV = 'production'
  
  const { say } = require('cfonts')
  const path = require('path')
  const chalk = require('chalk')
  const del = require('del')
  const fs = require('fs-extra')
  const webpack = require('webpack')
  const Multispinner = require('multispinner')
  
  
  const mainConfig = require('./webpack.main.config')
  const rendererConfig = require('./webpack.renderer.config')
  
  const doneLog = chalk.bgGreen.white(' DONE ') + ' '
  const errorLog = chalk.bgRed.white(' ERROR ') + ' '
  const okayLog = chalk.bgBlue.white(' OKAY ') + ' '
  const isCI = process.env.CI || false
  
  if (process.env.BUILD_TARGET === 'clean') clean()
  else if (process.env.BUILD_TARGET === 'web') web()
  else build()
  
  function clean () {
    del.sync(['build/*', '!build/icons', '!build/icons/icon.*'])
    console.log(`\n${doneLog}\n`)
    process.exit()
  }
  
  async function build () {
    greeting()
  
    del.sync(['dist/electron/*', '!.gitkeep'])
    del.sync(['static/themes/*'])
  
    const from = path.resolve(__dirname, '../src/muya/themes')
    const to = path.resolve(__dirname, '../static/themes')
    await fs.copy(from, to)
  
    const tasks = ['main', 'renderer']
    const m = new Multispinner(tasks, {
      preText: 'building',
      postText: 'process'
    })
  
    let results = ''
  
    m.on('success', () => {
      process.stdout.write('\x1B[2J\x1B[0f')
      console.log(`\n\n${results}`)
      console.log(`${okayLog}take it away ${chalk.yellow('`electron-builder`')}\n`)
      process.exit()
    })
  
    pack(mainConfig).then(result => {
      results += result + '\n\n'
      m.success('main')
    }).catch(err => {
      m.error('main')
      console.log(`\n  ${errorLog}failed to build main process`)
      console.error(`\n${err}\n`)
      process.exit(1)
    })
  
    pack(rendererConfig).then(result => {
      results += result + '\n\n'
      m.success('renderer')
    }).catch(err => {
      m.error('renderer')
      console.log(`\n  ${errorLog}failed to build renderer process`)
      console.error(`\n${err}\n`)
      process.exit(1)
    })
  }
  
  function pack (config) {
    return new Promise((resolve, reject) => {
      webpack(config, (err, stats) => {
        if (err) reject(err.stack || err)
        else if (stats.hasErrors()) {
          let err = ''
  
          stats.toString({
            chunks: false,
            colors: true
          })
          .split(/\r?\n/)
          .forEach(line => {
            err += `    ${line}\n`
          })
  
          reject(err)
        } else {
          resolve(stats.toString({
            chunks: false,
            colors: true
          }))
        }
      })
    })
  }
  
  function greeting () {
    const cols = process.stdout.columns
    let text = ''
  
    if (cols > 85) text = 'lets-build'
    else if (cols > 60) text = 'lets-|build'
    else text = false
  
    if (text && !isCI) {
      say(text, {
        colors: ['yellow'],
        font: 'simple3d',
        space: false
      })
    } else {
      console.log(chalk.yellow.bold('\n  lets-build'))
    }
  }
  