class ActiveGenie::Configuration::ProvidersConfig

def default

def default
  @default || @all.values.find { |p| p.api_key }.class::NAME
end

def initialize

def initialize
  @all = {}
  @default = nil
end

def register(provider_class)

def register(provider_class)
  @all ||= {}
  name = provider_class::NAME
  @all[name] = provider_class.new
  define_singleton_method(name) do
    instance_variable_get("@#{name}") || instance_variable_set("@#{name}", @all[name])
  end
  self
end

def to_h(config = {})

def to_h(config = {})
  hash_all = {}
  @all.each do |name, provider|
    hash_all[name] = provider.to_h(config.dig(name) || {})
  end
  hash_all
end

def valid

def valid
  valid_provider_keys = @all.keys.select { |k| @all[k].valid? }
  @all.slice(*valid_provider_keys)
end