module GraphQL
  module Sugar
    module Define
      module Attribute
        def self.call(type_defn, field_name, type_or_field = nil, desc = nil, **kwargs, &block) # rubocop:disable Metrics/ParameterLists
          model_class = Sugar.get_model_class(type_defn)
          column_name = Sugar.get_column_name(field_name)

          type_or_field ||= kwargs[:type] if !kwargs[:type].nil?
          type_or_field ||= Sugar.get_graphql_type(model_class, column_name)

          kwargs[:property] ||= column_name.to_sym if kwargs[:resolve].nil?

          GraphQL::Define::AssignObjectField.call(type_defn, field_name, type_or_field, desc, **kwargs, &block)
        end
      end
    end
  end
end