module RademadeAdmin
  module Model
    module DataAdapter
      class ActiveRecord
        include RademadeAdmin::Model::DataAdapter

        def relations
          @model.reflections
        end

        def reflect_on_association(name)
          @model.reflect_on_association(name)
        end

        def association_foreign_key(relation)
          assoc_key = relation.association_foreign_key
          if relation.collection?
            assoc_key += 's'
          end
          assoc_key
        end

        def fields
          @model.column_types
        end

        def has_field?(field)
          fields.include? field
        end

        def foreign_key?(field)
          if field.is_a? ::ActiveRecord::AttributeMethods::TimeZoneConversion::Type # why another behaviour?
            field_name = field.instance_values['column'].name
          else
            field_name = field.name
          end
          field_name[-3, 3] == '_id'
        end

        protected

        def has_many_relations
          [:has_many, :has_and_belongs_to_many]
        end

        def has_one_relations
          [:has_one, :belongs_to]
        end

      end
    end
  end
end