import { Command, Option } from 'commander'
import chalk from 'chalk'
import pkg from '../package.json'
import execInit from '../commands/init/index'
import execPublish from '../commands/publish'
import execPreview from '../commands/preview'
import execGenerate from '../commands/generate'
import execBuild from '../commands/build'
import exetranslate from '../commands/translate'
import execReplace from '../commands/i18n-replace'
import execOss from '../commands/oss'
import execGit from '../commands/git'


const program = new Command()

// 注册命令
function registerCommand() {
  program
    .name(Object.keys(pkg.bin)[0]) // 主命令名称
    .usage('<command> [options]') // 规定用法规则
    .version(pkg.version) // 设置版本指令

  // 设置debug模式用于调试.默认隐藏选项
  program.addOption(
    new Option('-d, --debug', '是否开启调试模式').default(false).hideHelp()
  )

  // 注册:初始化模板指令
  // 初始化指令
  program.command('init').description('初始化模板项目').action(execInit)

  program
    .command('oss')
    .description('oss相关命令')
    .option('--ls,--list', '查看oss资源')
    .option('--upload', '上传文件到oss')
    .option('--doc', '上传文件到oss 目录Doc')
    .option('--ossPath <ossPath>', 'oss路径')
    .option('--localPath <localPath>', '本地上传文件目录')
    .option('--clear-cache', '清除缓存')
    .action(execOss)

  // 生成指令
  program
    .command('generate')
    .description('生成物料')
    .option('--doc', '生成文档')
    .option('--clear-cache', '清除缓存')
    .action(execGenerate)

  // 预览指令
  program
    .command('preview')
    .option('--doc', '预览文档')
    .description('预览物料')
    .action(execPreview)

  // 打包指令
  program
    .command('build')
    .option('--doc', '打包文档')
    .description('打包物料')
    .action(execBuild)

  // 发布指令
  program
    .command('publish')
    .option('--doc', '发布文档')
    .description('发布物料')
    .action(execPublish)

  // 翻译文件命令
  program
    .command('fy')
    .option('--translate', '翻译文件')
    .option('--locale <localeto>', '翻译后的语言')
    .option('--localPath <localPath>', '本地上传文件目录')
    .option('--config <config>', '本地上传文件目录')
    .option('--outPutPath <outPutPath>', '本地输出文件目录')
    .description('翻译文件')
    .action(exetranslate)

  // i18n语法替换
  program
    .command('replace')
    .description('自动用i18n替换中文')
    .action(execReplace)


  // git操作
  program
    .command('git')
    .option('--tag', '自动打标签')
    .description('git操作')
    .action(execGit)

  // 监听debug参数
  // 方便其他文件从process.env.debug中获取debug模式状态
  program.on('option:debug', function () {
    if (program.opts().debug) {
      process.env.debug = 'true'
    } else {
      process.env.debug = ''
    }
  })

  // 监听未知命令
  program.on('command:*', function (obj) {
    console.log(chalk.red(`${obj[0]} 是一个未知的命令！！！`))
    console.log(chalk.red(`---------- 请查阅下方使用文档：----------`))
    program.outputHelp()
  })

  // 处理指令参数
  program.parse(process.argv)
}

// module.exports = registerCommand
export default registerCommand
