var fs = require('fs')
var resolve = require('path').resolve

var osenv = require('osenv')
var mkdirp = require('mkdirp')
var rimraf = require('rimraf')
var test = require('tap').test

var common = require('../common-tap.js')

var pkg = resolve(__dirname, 'graceful-restart')

var outGraceless = [
  'prerestart',
  'prestop',
  'stop',
  'poststop',
  'prestart',
  'start',
  'poststart',
  'postrestart',
  ''
].join('\n')

var outGraceful = [
  'prerestart',
  'restart',
  'postrestart',
  ''
].join('\n')

var pjGraceless = JSON.stringify({
  name: 'graceless',
  version: '1.2.3',
  scripts: {
    'prestop': 'echo prestop',
    'stop': 'echo stop',
    'poststop': 'echo poststop',
    'prerestart': 'echo prerestart',
    'postrestart': 'echo postrestart',
    'prestart': 'echo prestart',
    'start': 'echo start',
    'poststart': 'echo poststart'
  }
}, null, 2) + '\n'

var pjGraceful = JSON.stringify({
  name: 'graceful',
  version: '1.2.3',
  scripts: {
    'prestop': 'echo prestop',
    'stop': 'echo stop',
    'poststop': 'echo poststop',
    'prerestart': 'echo prerestart',
    'restart': 'echo restart',
    'postrestart': 'echo postrestart',
    'prestart': 'echo prestart',
    'start': 'echo start',
    'poststart': 'echo poststart'
  }
}, null, 2) + '\n'

test('setup', function (t) {
  bootstrap()
  t.end()
})

test('graceless restart', function (t) {
  fs.writeFileSync(resolve(pkg, 'package.json'), pjGraceless)
  createChild(['run-script', 'restart'], function (err, code, out) {
    t.ifError(err, 'restart finished successfully')
    t.equal(code, 0, 'npm run-script exited with code')
    t.equal(out, outGraceless, 'expected all scripts to run')
    t.end()
  })
})

test('graceful restart', function (t) {
  fs.writeFileSync(resolve(pkg, 'package.json'), pjGraceful)
  createChild(['run-script', 'restart'], function (err, code, out) {
    t.ifError(err, 'restart finished successfully')
    t.equal(code, 0, 'npm run-script exited with code')
    t.equal(out, outGraceful, 'expected only *restart scripts to run')
    t.end()
  })
})

test('clean', function (t) {
  cleanup()
  t.end()
})

function bootstrap () {
  mkdirp.sync(pkg)
}

function cleanup () {
  process.chdir(osenv.tmpdir())
  rimraf.sync(pkg)
}

function createChild (args, cb) {
  var env = {
    HOME: process.env.HOME,
    Path: process.env.PATH,
    PATH: process.env.PATH,
    'npm_config_loglevel': 'silent'
  }

  if (process.platform === 'win32')
    env.npm_config_cache = '%APPDATA%\\npm-cache'

  return common.npm(args, {
    cwd: pkg,
    stdio: ['ignore', 'pipe', 'ignore'],
    env: env
  }, cb)
}
