class ForumUpdater
  attr_reader :forum_topic, :forum_post, :expected_title

  def initialize(forum_topic, options = {})
    @forum_topic = forum_topic
    @forum_post = options[:forum_post]
    @expected_title = options[:expected_title]
  end

  def update(message, title_tag = nil)
    return if forum_topic.nil?
    
    CurrentUser.scoped(User.system) do
      create_response(message)
      update_title(title_tag) if title_tag

      if forum_post
        update_post(message)
      end
    end
  end

  def create_response(body)
    forum_topic.posts.create(
      :body => body
    )
  end

  def update_title(title_tag)
    if forum_topic.title == expected_title
      forum_topic.update(:title => "[#{title_tag}] #{forum_topic.title}")
    end
  end

  def update_post(body)
    forum_post.update(:body => "#{forum_post.body}\n\n#{body}")
  end
end
