module ObjectMetadata
  extend ActiveSupport::Concern

  def add_metadata_to_xml_node(el, osm, changeset_cache, user_display_name_cache)
    el["changeset"] = osm.changeset_id.to_s
    el["redacted"] = osm.redaction.id.to_s if osm.redacted?
    el["timestamp"] = osm.timestamp.xmlschema
    el["version"] = osm.version.to_s
    el["visible"] = osm.visible.to_s

    if changeset_cache.key?(osm.changeset_id)
      # use the cache if available
    else
      changeset_cache[osm.changeset_id] = osm.changeset.user_id
    end

    user_id = changeset_cache[osm.changeset_id]

    if user_display_name_cache.key?(user_id)
      # use the cache if available
    elsif osm.changeset.user.data_public?
      user_display_name_cache[user_id] = osm.changeset.user.display_name
    else
      user_display_name_cache[user_id] = nil
    end

    unless user_display_name_cache[user_id].nil?
      el["user"] = user_display_name_cache[user_id]
      el["uid"] = user_id.to_s
    end
  end

  def add_tags_to_xml_node(el, tags)
    tags.each do |tag|
      tag_el = XML::Node.new("tag")

      tag_el["k"] = tag.k
      tag_el["v"] = tag.v

      el << tag_el
    end
  end
end
