require 'yaml'

module Vcloud
  module Tools
    module Tester
      class UserParameters
        attr_reader :user_params

        def initialize(config_file, expected_user_params)
          @config_file = config_file
          @expected_user_params = expected_user_params || []

          parse_config
        end

        private

        def parse_config
          unless File.exist?(@config_file)
            raise ArgumentError.new("Missing required file: #{@config_file}")
          end

          organization = ENV.fetch('FOG_CREDENTIAL') do
            raise "Must set FOG_CREDENTIAL environment variable"
          end

          all_config = YAML::load_file(@config_file)

          @user_params = all_config.fetch(organization) do
            raise "Invalid FOG_CREDENTIAL environment variable value '#{organization}'"
          end

          defined_keys = @user_params.keys
          missing_params = @expected_user_params - defined_keys
          if missing_params.any?
            raise "Required parameters not defined in #{@config_file}: " + missing_params.join(", ")
          end
        end
      end
    end
  end
end