#!/usr/bin/env ruby
# frozen_string_literal: true

require "optparse"
require 'active_support/core_ext/hash'

require_relative "../lib/gitlab_quality/test_tooling"
params = {}

options = OptionParser.new do |opts|
  opts.banner = "Usage: #{$PROGRAM_NAME} [options]"

  opts.on('-p', '--project PROJECT', String, 'Name of the project') do |project|
    params[:project] = project
  end
  opts.on('-g', '--group GROUP', String, 'Name of the group') do |group|
    params[:group] = group
  end

  opts.on('-t', '--token TOKEN', String, 'A valid access token with `api` scope and Maintainer permission in PROJECT') do |token|
    params[:token] = token
  end

  opts.on('-l', '--search_labels LABELS', String, 'A comma seperated list of labels to filter the epics on') do |search_labels|
    params[:search_labels] = search_labels.split(',')
  end

  opts.on('-m', '--minutes MINUTES', Integer, 'Limit the search to issues and epics created with last MINUTES. Optional.') do |minutes|
    params[:limit_to_minutes] = minutes
  end

  opts.on('-ei', '--epic-iid EPIC_IID', String, 'evaluate an epic with iid') do |epic_iid|
    params[:epic_iid] = epic_iid
  end

  opts.on('--dry-run', "Perform a dry-run (don't create branches, commits or MRs)") do
    params[:dry_run] = true
  end

  opts.on_tail('-v', '--version', 'Show the version') do
    require_relative "../lib/gitlab_quality/test_tooling/version"
    puts "#{$PROGRAM_NAME} : #{GitlabQuality::TestTooling::VERSION}"
    exit
  end

  opts.on_tail('-h', '--help', 'Show the usage') do
    puts "Purpose: Evaluate MRs for multiple feature readiness criteria and report the status to the corresponding epic"
    puts opts
    exit
  end

  opts.parse(ARGV)
end

raise ArgumentError, "Missing argument(s). Required arguments are: --project, --group, --token" if params.empty? || ([:project, :group, :token] - params.keys).any?

if params.any?
  GitlabQuality::TestTooling::FeatureReadiness::Evaluation.new(**params).invoke!
else
  puts options
  exit 1
end
