class UserActionSerializer < ApplicationSerializer

  attributes :action_type,
             :created_at,
             :excerpt,
             :avatar_template,
             :acting_avatar_template,
             :slug,
             :topic_id,
             :target_user_id,
             :target_name,
             :target_username,
             :post_number,
             :reply_to_post_number,
             :username,
             :name,
             :user_id,
             :acting_username,
             :acting_name,
             :acting_user_id,
             :title,
             :deleted,
             :hidden,
             :moderator_action

  def excerpt
    PrettyText.excerpt(object.cooked,300) if object.cooked
  end

  def avatar_template
    avatar_for(
      object.email,
      object.use_uploaded_avatar,
      object.uploaded_avatar_template,
      object.uploaded_avatar_id
    )
  end

  def acting_avatar_template
    avatar_for(
                object.acting_email,
                object.acting_use_uploaded_avatar,
                object.acting_uploaded_avatar_template,
                object.acting_uploaded_avatar_id
    )
  end

  def slug
    Slug.for(object.title)
  end

  def moderator_action
    object.post_type == Post.types[:moderator_action]
  end

  private
  def avatar_for(email, use_uploaded_avatar, uploaded_avatar_template, uploaded_avatar_id)
    # NOTE: id is required for cases where the template is blank (during initial population)
    User.new(
      email: email,
      use_uploaded_avatar: use_uploaded_avatar,
      uploaded_avatar_template: uploaded_avatar_template,
      uploaded_avatar_id: uploaded_avatar_id
    ).avatar_template
  end

end