class HovercardPresenter

  attr_accessor :person

  # initialize the presenter with the given Person object
  def initialize(person)
    raise ArgumentError, "the given object is not a Person" unless person.class == Person

    self.person = person
  end

  # returns the json representation of the Person object for use with the
  # hovercard UI
  def to_json(options={})
    {  :id => person.id,
       :avatar => avatar('small'),
       :url => profile_url,
       :name => person.name,
       :handle => person.diaspora_handle,
       :tags => person.tags.map { |t| "#"+t.name }
    }.to_json(options)
  end

  # get the image url of the profile avatar for the given size
  # possible sizes: 'small', 'medium', 'large'
  def avatar(size="small")
    if !["small", "medium", "large"].include?(size)
      raise ArgumentError, "the given parameter is not a valid size"
    end

    person.image_url("thumb_#{size}".to_sym)
  end

  # return the (relative) url to the user profile page.
  # uses the 'person_path' url helper from the rails routes
  def profile_url
    Rails.application.routes.url_helpers.person_path(person)
  end
end
