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

require "bundler/setup"
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('-u', '--epic-urls URLS', String, 'Comma-separated list of epic URLs') do |urls|
    params[:epic_urls] = urls.split(',').map(&:strip)
  end

  opts.on('-f', '--epic-urls-file FILE', String, 'File containing epic URLs (one per line)') do |file|
    params[:epic_urls_file] = file
  end

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

  opts.on('-m', '--message MESSAGE', String, 'Custom message template (optional)') do |message|
    params[:message] = message
  end

  opts.on('--dry-run', "Perform a dry-run (don't post comments)") 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: Send feature readiness assessment notifications to epic authors via @mentions"
    puts opts
    exit
  end

  opts.parse(ARGV)
end

# Validate required arguments
raise ArgumentError, "Missing required argument: --token" unless params[:token]
raise ArgumentError, "Must provide either --epic-urls or --epic-urls-file" unless params[:epic_urls] || params[:epic_urls_file]

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