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

require "bundler/setup"
require "optparse"

require_relative "../lib/gitlab_quality/test_tooling"

params = {}

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

  opts.on('-i', '--input-files INPUT_FILES', String, 'RSpec report files (JSON or JUnit XML)') do |input_files|
    params[:input_files] = input_files
  end

  opts.on('--test-case-project TEST_CASE_PROJECT', String,
    'Can be an integer or a group/project string') do |test_case_project|
    params[:test_case_project] = test_case_project
  end

  opts.on('-t', '--test-case-project-token TEST_CASE_PROJECT_TOKEN', String,
    'A valid access token with `api` scope and Reporter permission in TEST_CASE_PROJECT') do |test_case_project_token|
    params[:test_case_project_token] = test_case_project_token
  end

  opts.on('--results-issue-project RESULTS_ISSUE_PROJECT', String,
    'Can be an integer or a group/project string') do |results_issue_project|
    params[:results_issue_project] = results_issue_project
  end

  opts.on('-r', '--results-issue-project-token RESULTS_ISSUE_PROJECT_TOKEN', String,
    'A valid access token with `api` scope and Reporter permission in RESULTS_ISSUE_PROJECT') do |results_issue_project_token|
    params[:results_issue_project_token] = results_issue_project_token
  end

  opts.on('--dry-run', "Perform a dry-run (don't create/update issues or test cases)") 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: Report test results from RSpec report files (JSON or JUnit XML) in GitLab test cases and result issues"
    puts opts
    exit
  end

  opts.parse(ARGV)
end

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