module Notes
  class LoadContext < BaseContext
    def execute
      target_type = params[:target_type]
      target_id   = params[:target_id]
      first_id    = params[:first_id]
      last_id     = params[:last_id]


      @notes = case target_type
               when "commit" 
                 then project.commit_notes(project.commit(target_id)).fresh.limit(20)
               when "snippet"
                 then  project.snippets.find(target_id).notes
               when "wall"
                 then project.common_notes.order("created_at DESC").fresh.limit(50)
               when "issue"
                 then project.issues.find(target_id).notes.inc_author.order("created_at DESC").limit(20)
               when "merge_request"
                 then project.merge_requests.find(target_id).notes.inc_author.order("created_at DESC").limit(20)
               when "wiki"
                 then project.wikis.reverse.map {|w| w.notes.fresh }.flatten[0..20]
               end

      @notes = if last_id
                 @notes.where("id > ?", last_id)
               elsif first_id
                 @notes.where("id < ?", first_id)
               else 
                 @notes
               end
    end
  end
end