const inquirer = require('inquirer')
const semver = require('semver')
const package = require('../package.json')
const util = require('util')
const exec = util.promisify(require('child_process').exec)
async function publish() {
  const config = await inquirer.prompt([
    {
      type: 'list',
      name: 'version',
      message: '请选择本次发布的版本类型:',
      choices: ['Prerelease', 'Patch', 'Minor', 'Major'],
      filter: function(val) {
        return val.toLowerCase()
      }
    },
    {
      type: 'confirm',
      name: 'isLatest',
      message: '是正式版发布吗?',
      default: false
    }
  ])

  if (config.isLatest && config.version === 'prerelease') {
    console.log('PreRelease版本不能发布正式版!')
    return
  }

  if (!config.isLatest && config.version !== 'prerelease') {
    config.version = 'pre' + config.version
  }

  let newVersion = semver.inc(package.version, config.version)

  const publishCommand = 'npm publish' + (config.isLatest ? '' : ' --tag beta')

  const confirmMessage = `请确认核对信息:
  ==========发布信息==========
  当前版本:${package.version}
  发布版本:${newVersion}
  执行命令:npm version ${newVersion} && ${publishCommand}
  ==========发布信息==========
  以上信息确认无误?`
  const confirm = await inquirer.prompt([
    {
      type: 'confirm',
      name: 'result',
      message: confirmMessage,
      default: false
    }
  ])

  if (confirm.result) {
    console.log('发布中...')
    const { stdout, stderr } = await exec(
      `npm version ${newVersion} && ${publishCommand}`
    )
    console.log('stdout:', stdout)
    console.log('stderr:', stderr)
    console.log('发布成功!')
  }
}
publish()