#coding=utf-8

module Mobile
  module Apis
    class NewComment< Grape::API
      include ApplicationHelper
      include ApiHelper
      resources :new_comment do

        desc "add a new comment"
        params do
          requires :type, type: String
          requires :content, type: String
          requires :openid, type: String
        end
        post ':id' do
          type = params[:type]
          result = 1
          current_user = UserWechat.find_by_openid(params[:openid]).user
          if params[:content]!="" && current_user
            case type
              when "HomeworkCommon"
                homework_common = HomeworkCommon.find(params[:id])
                feedback = HomeworkCommon.add_homework_jour(current_user, params[:content], params[:id])
                if (feedback.errors.empty?)
                  homework_common.update_column(:updated_at, Time.now)
                  result = 2
                end
              when "News"
                news = News.find(params[:id])
                comment = Comment.new
                comment.comments = params[:content]
                comment.author = current_user
                if news.comments << comment
                  result = 2
                end
              when "Message"
                message = Message.find(params[:id])
                board = Board.find(message.board_id)
                topic = message.root
                reply = Message.new
                reply.author = current_user
                reply.board = board
                reply.content = params[:content]
                reply.parent_id = params[:id]
                reply.subject = "RE: #{topic.subject}"
                if topic.children << reply
                  result = 2
                end
              when "JournalsForMessage"
                jour = JournalsForMessage.find params[:id]
                parent_id = params[:id]
                author_id = current_user.id
                reply_user_id = jour.user_id
                reply_id = params[:id]
                content = params[:content]
                options = {:user_id => author_id,
                           :status => true,
                           :m_parent_id => parent_id,
                           :m_reply_id => reply_id,
                           :reply_id => reply_user_id,
                           :notes => content,
                           :is_readed => false}
                jfm = jour.user.add_jour(nil, nil, nil, options)
                if jfm.errors.empty?
                  (JournalsForMessage.find parent_id).update_attribute(:updated_on,Time.now)
                  result = 2
                end
              when 'Issue'
                issue = Issue.find params[:id]
                is_jour = Journal.new
                is_jour.user_id = current_user.id
                is_jour.notes = params[:content]
                is_jour.journalized = issue
                if is_jour.save
                  result = 2
                end
              when 'BlogComment'
                blog = BlogComment.find(params[:id]).root
                blogComment = BlogComment.new
                blogComment.author = current_user
                blogComment.blog = blog.blog
                blogComment.content = params[:content]
                blogComment.title = "RE: #{blog.title}"
                if blog.children << blogComment
                  result = 2
                end
            end
            if result == 2
              update_course_activity_api(type,params[:id])
              update_user_activity_api(type,params[:id])
              update_org_activity_api(type,params[:id])
              update_forge_activity_api(type,params[:id])
              update_principal_activity_api(type,params[:id])
            end
          else
            result = 3
          end
          present :result, result
          present :status, 0
        end
      end
    end
  end
end
