// We listen for hexo changes on *.es6 extensions.
// We fire our own build-examples.js and tell it which example to build -
// that script then writes temporary js files
// which we return via the callback.
var exec = require('child_process').exec
var path = require('path')
var fs = require('fs')
var uuid = require('uuid')
var webRoot = path.dirname(path.dirname(__dirname))
var browserifyScript = webRoot + '/build-examples.js'

function parseExamplesBrowserify (data, options, callback) {
  if (!data || !data.path) {
    return callback(null)
  }

  if (!data.path.match(/\/examples\//)) {
    callback(null, data.text)
  }

  // var slug    = data.path.replace(/[^a-zA-Z0-9\_\.]/g, '-')
  var slug = uuid.v4()
  var tmpFile = '/tmp/' + slug + '.js'
  var cmd = 'node ' + browserifyScript + ' ' + data.path + ' ' + tmpFile + ' --colors'
  // hexo.log.i('hexo-renderer-uppyexamples: change detected in examples. running: ' + cmd);
  exec(cmd, function (err, stdout, stderr) {
    if (err) {
      return callback(err)
    }

    hexo.log.i('hexo-renderer-uppyexamples: ' + stdout.trim())

    fs.readFile(tmpFile, 'utf-8', function (err, bundledJS) {
      if (err) {
        return callback(err)
      }
      // hexo.log.i('hexo-renderer-uppyexamples: read: ' + tmpFile);

      // @TODO remove this hack
      // once this is resolved: https://github.com/hexojs/hexo/issues/1663
      // bundledJS = bundledJS.replace(/</g, ' < ');
      bundledJS = bundledJS.replace(/<(?!=)/g, ' < ')

      callback(null, bundledJS)
    })
  })
}

hexo.extend.renderer.register('es6', 'js', parseExamplesBrowserify)