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

require "optparse"

$stdout.sync = true
$stderr.sync = true

script_basename = File.basename(__FILE__)
repo_lib = File.expand_path("../lib", __dir__)
$LOAD_PATH.unshift(repo_lib) if File.directory?(repo_lib) && !$LOAD_PATH.include?(repo_lib)

begin
  require "kettle/dev"
  require "kettle/dev/executable_version"
  Kettle::Dev::ExecutableVersion.print_and_exit!(script_basename, ARGV, value_option: true)
  Kettle::Dev::ExecutableVersion.print_header(script_basename)
rescue LoadError
  warn "kettle-release-secrets-doctor must run with kettle-dev on the load path"
  exit 1
end

options = Kettle::Dev::ReleaseSecretsDoctor.options_from_env

OptionParser.new do |parser|
  parser.banner = "Usage: kettle-release-secrets-doctor [options]"
  parser.on("--provider NAME", "Secrets provider name, default: op") { |value| options[:provider] = value }
  parser.on("--sleep SECONDS", Float, "Seconds to wait between probes") { |value| options[:sleep_seconds] = value }
  parser.on("--keepalive SECONDS", Float, "Run keepalive every N seconds while waiting; 0 disables") { |value| options[:keepalive_seconds] = value }
  parser.on("--shape SHAPE", "Shape: #{Kettle::Dev::ReleaseSecretsDoctor::SHAPES.join(", ")}") { |value| options[:shape] = value }
  parser.on("--otp", "Fetch RubyGems OTP after the wait") { options[:otp] = true }
end.parse!

begin
  Kettle::Dev::ReleaseSecretsDoctor.new(options: options, program_name: $PROGRAM_NAME).run
rescue Kettle::Dev::Error => e
  warn e.message
  exit 1
end
