# frozen_string_literal: true

# module Mongoid #:nodoc:
#   module Relations #:nodoc:
#     module Referenced #:nodoc:

#       # This class defines the behaviour for all relations that are a
#       # one-to-many between documents in different collections.
#       class Many < Relations::Many

#         def build_with_custom_fields(attributes = {}, type = nil)
#           if base.respond_to?(:custom_fields_for?) && base.custom_fields_for?(relation_metadata.name)
#             # all the information about how to build the custom class are stored here
#             recipe = base.custom_fields_recipe_for(relation_metadata.name)
#             attributes ||= {}
#             attributes.merge!(custom_fields_recipe: recipe)
#             # build the class with custom_fields for the first time
#             type = relation_metadata.klass.klass_with_custom_fields(recipe)
#           end
#           build_without_custom_fields(attributes, type)
#         end

#         alias_method :build_without_custom_fields, :build
#         alias_method :build, :build_with_custom_fields

#         # new should point to the new build method
#         alias :new :build_with_custom_fields
#       end

#     end
#   end
# end

module CustomFieldsManyExtension
  def build(attributes = {}, type = nil)
    if _base.respond_to?(:custom_fields_for?) && _base.custom_fields_for?(association.name)
      # all the information about how to build the custom class are stored here
      recipe = _base.custom_fields_recipe_for(association.name)
      attributes ||= {}
      attributes.merge!(custom_fields_recipe: recipe)
      # build the class with custom_fields for the first time
      type = association.klass.klass_with_custom_fields(recipe)
    end
    super(attributes, type)
  end
  alias new build
end

::Mongoid::Association::Referenced::HasMany::Proxy.prepend CustomFieldsManyExtension
