class ZuoraConnect::Login

def initialize (fields)

def initialize (fields)
  self.clients = {}
  self.identifier_to_ids = {}
  if fields["tenant_type"] == "Zuora"
    login_fields = fields.map{|k,v| [k.to_sym, v]}.to_h
    login_type = fields.dig("authentication_type").blank? ? 'Basic' : fields.dig("authentication_type").capitalize
    
    raise ZuoraConnect::Exceptions::InvalidCredentialSet.new("Cannot setup application with ZSession Login.") if login_type == "Session"
    self.clients["Default"] = "::ZuoraAPI::#{login_type}".constantize.new(**login_fields)
    self.default_entity = fields["entities"][0]["id"] if (fields.dig("entities") || []).size == 1
    if fields["entities"] && fields["entities"].size > 0
      fields["entities"].each do |entity|
        params = {:entity_id => entity["id"], :entity_identifier => entity["identifier"]}.merge(login_fields)
        self.clients[entity["id"]] =  "::ZuoraAPI::#{login_type}".constantize.new(**params)
        self.identifier_to_ids[entity["identifier"]] = entity["id"]
      end
    end
    self.attr_builder("available_entities", self.clients.keys) 
  end
  fields.each do |k,v|
    self.attr_builder(k,v)
  end
  self.default_entity ||= "Default"
end