def parse_cli
  cli.defaults = {
    database: :recommended,
    version: :latest,
    local: File.join(ENV['MIGA_HOME'], '.miga_db'),
    host: MiGA::MiGA.known_hosts(:miga_db),
    pb: true,
    reuse_archive: false,
    overwrite: true
  }
  cli.parse do |opt|
    opt.on(
      '-n', '--database STRING',
      "Name of the database to download. By default: #{cli[:database]}"
    ) { |v| cli[:database] = v.to_sym }
    opt.on(
      '--db-version STRING',
      "Database version to download. By default: #{cli[:version]}"
    ) { |v| cli[:version] = v.to_sym }
    opt.on(
      '-l', '--local-dir PATH',
      "Local directory to store the database. By default: #{cli[:local]}"
    ) { |v| cli[:local] = v }
    opt.on(
      '--host STRING',
      "Remote host of the database. By default: #{cli[:host]}"
    ) { |v| cli[:host] = v }
    opt.on(
      '--list',
      'List available databases and exit'
    ) { |v| cli[:list_databases] = v }
    opt.on(
      '--list-versions',
      'List available versions of the database and exit'
    ) { |v| cli[:list_versions] = v }
    opt.on(
      '--list-local',
      'List only the versions of the local databases (if any) and exit'
    ) { |v| cli[:list_local] = v }
    opt.on(
      '--reuse-archive',
      'Reuse a previously downloaded archive if available'
    ) { |v| cli[:reuse_archive] = v }
    opt.on(
      '--no-overwrite',
      'Exit without downloading if the target database already exists'
    ) { |v| cli[:overwrite] = v }
    opt.on(
      '--tab',
      'Return a tab-delimited table'
    ) { |v| cli[:tabular] = v }
    opt.on('--no-progress', 'Supress progress bars') { |v| cli[:pb] = v }
  end
end