export default plop => {
  plop.setGenerator('module', {
    description: '生成一个模块',
    prompts: [
      {
        type: 'input',
        name: 'name',
        message: '模块名称: '
      },
      {
        type: 'checkbox',
        name: 'type',
        message: '勾选需要生成的模板: ',
        choices: [
          {
            name: 'api',
            value: 'api',
            checked: true
          },
          {
            name: 'view',
            value: 'view',
            checked: true
          },
          {
            name: 'router',
            value: 'router',
            checked: true
          }
        ]
      }
    ],
    actions: data => {
      const actions = []
      data.type.forEach(type => {
        if (type === 'router') {
          actions.push({
            type: 'append',
            pattern: /(?=(\/\/ -- APPEND HERE --))/gi,
            path: 'src/router/asyncRouter.ts',
            templateFile: 'plop-template/router.hbs'
          })
        } else if (type === 'view') {
          actions.push({
            type: 'add',
            path: 'src/views/{{camelCase name}}/{{pascalCase name}}.vue',
            templateFile: `plop-template/${type}.hbs`
          })
        } else {
          actions.push({
            type: 'add',
            path: `src/api/{{camelCase name}}.ts`,
            templateFile: `plop-template/${type}.hbs`
          })
        }
      })
      return actions
    }
  })

  plop.setGenerator('micro', {
    description: '生成一个微服务',
    prompts: [
      {
        type: 'input',
        name: 'name',
        message: '微服务名称: '
      }
    ],
    actions: [
      {
        type: 'add',
        path: 'src/views/micro/{{pascalCase name}}.vue',
        templateFile: 'plop-template/micro.hbs'
      },
      {
        type: 'append',
        pattern: /(?=(\/\/ -- APPEND HERE --))/gi,
        path: 'src/router/asyncRouter.ts',
        templateFile: 'plop-template/microRouter.hbs'
      }
    ]
  })
  plop.setHelper('upperCase', string => string.charAt(0).toUpperCase() + string.slice(1))
}
