require_relative "database_configuration_registry"
require "delegate"

module Snowglobe
  class DatabaseConfiguration < SimpleDelegator
    ENVIRONMENTS = %w(development test production).freeze

    attr_reader :adapter_class

    def self.for(database_name, adapter_name)
      config_class = DatabaseConfigurationRegistry.instance.get(adapter_name)
      config = config_class.new(database_name)
      new(config)
    end

    def initialize(config)
      @adapter_class = config.class.to_s.split("::").last
      super(config)
    end

    def to_hash
      ENVIRONMENTS.each_with_object({}) do |env, config_as_hash|
        config_as_hash[env] = inner_config_as_hash
      end
    end

    private

    def inner_config_as_hash
      { "adapter" => adapter.to_s, "database" => database.to_s }
    end
  end
end
