import * as plugins from './mod.plugins'
import { bash } from '../npmci.bash'
import { repo } from '../npmci.env'

/**
 * handle cli input
 * @param argvArg
 */
export let handleCli = async (argvArg) => {
  if (argvArg._.length >= 2) {
    let action: string = argvArg._[ 1 ]
    switch (action) {
      case 'mirror':
        await mirror()
        break
      default:
        plugins.beautylog.error(`>>npmci git ...<< action >>${action}<< not supported`)
    }
  } else {
    plugins.beautylog.log(`>>npmci git ...<< cli arguments invalid... Please read the documentation.`)
  }
}

export let mirror = async () => {
  let githubToken = process.env.NPMCI_GIT_GITHUBTOKEN
  let githubUser = process.env.NPMCI_GIT_GITHUBGROUP || repo.user
  let githubRepo = process.env.NPMCI_GIT_GITHUB || repo.repo
  if (githubToken) {
    plugins.beautylog.info('found github token.')
    plugins.beautylog.log('attempting the mirror the repository to GitHub')
    // add the mirror
    await bash(`git remote add mirror https://${githubToken}@github.com/${githubUser}/${githubRepo}.git`)
    await bash(`git push mirror --all`)
    plugins.beautylog.ok('pushed all branches to mirror!')
    await bash(`git push mirror --tags`)
    plugins.beautylog.ok('pushed all tags to mirror!')
  } else {
    plugins.beautylog.error(`cannot find NPMCI_GIT_GITHUBTOKEN env var!`)
    process.exit(1)
  }
}