// tslint:disable:no-console no-if-statement no-expression-statement

import meow from 'meow'
import { Package, UpdateInfo, UpdateNotifier } from 'update-notifier'
import { OpenDBiOptions } from './utils'

const cli = meow(
  `
Usage
  $ npx openDBi

Non-Interactive Usage
  $ npx openDBi [options] <input>

Options
  --keystore, -k      create keystore or recover from keystore

  Non-Interactive Example
  $ openDBi --k
  `,
  {
    flags: {
      keystore: {
        alias: 'k',
        default: false,
        type: 'boolean',
      },
    },
  }
)

export async function checkArgs(): Promise<OpenDBiOptions> {
  // immediately check for updates every time we run openDBi
  await checkUpdate(cli.pkg)

  return {
    keystore: cli.flags.keystore,
  }
}

export const showHelp = cli.showHelp

async function checkUpdate(pkg: Package) {
  const updateInfo = await new Promise<UpdateInfo>((resolve, reject) => {
    const notifier = new UpdateNotifier({
      callback: (error, update) => {
        error ? reject(error) : resolve(update)
      },
      pkg,
    })
    notifier.check()
  })
  if (updateInfo.type !== 'latest') {
    throw new Error(`
    Your version of openDBi is outdated.
    Consider using 'npx openDBi' to always get the latest version.
    `)
  }
}
