lib/services/configurator.ex

# frozen_string_literal: true

defmodule ActiveStorage.Service.Configurator do
  # attr_reader :configurations

  def build(service_name, configurations) do
    # new(configurations).instance_build(service_name)
    instance_build(service_name, configurations)
  end

  # def initialize(configurations) do
  def new(_configurations) do
    # @configurations = configurations.deep_symbolize_keys
  end

  def instance_build(_service_name, configurations) do
    # config = config_for(service_name.to_sym)
    resolve(configurations.service)
    # .build(
    #  **config, configurator: self, name: service_name
    # )
  end

  defp config_for(_name) do
    # configurations.fetch name do
    #  raise "Missing configuration for the #{name.inspect} Active Storage service. Configurations available for #{configurations.keys.inspect}"
    # end
  end

  defp resolve(class_name) do
    class_name = class_name |> Macro.camelize()
    Module.concat(["ActiveStorage.Service.#{class_name}Service"])
    # require "active_storage/service/#{class_name.to_s.underscore}_service"
    # ActiveStorage::Service.const_get(:"#{class_name.camelize}Service")
    # rescue LoadError
    # raise "Missing service adapter for #{class_name.inspect}"
  end
end