# -*- coding: binary -*-

module Msf
  module Ui
    module Formatter
      class OptionValidateError
        #
        # Print the `Msf::OptionValidateError` error in a human readable format
        #
        # @param mod  [::Msf::Framework, ::Msf::Simple::Framework]  The mod
        # @param error [::Msf::OptionValidateError] The error to print
        def self.print_error(mod, error)
          raise ArgumentError, "invalid error type #{error.class}, expected ::Msf::OptionValidateError" unless error.is_a?(::Msf::OptionValidateError)

          if error.reasons.empty?
            if error.message
              mod.print_error("#{error.class} #{error.message}")
            else
              mod.print_error("#{error.class} The following options failed to validate: #{error.options.join(', ')}")
            end
          else
            mod.print_error("#{error.class} The following options failed to validate:")
            error.options.sort.each do |option_name|
              reasons = error.reasons[option_name]
              if reasons
                mod.print_error("Invalid option #{option_name}: #{reasons.join(', ')}")
              else
                mod.print_error("Invalid option #{option_name}")
              end
            end
          end
        end
      end
    end
  end
end
