#coding=utf-8
module Mobile
  module Apis
    class Comments < Grape::API
      include ApplicationHelper
      resource :comments do
        desc '课程通知评论'
        params do
          requires :token, type: String
          requires :comments, type: String
        end
        post ':id' do
          cs = CommentService.new
          cs_params = {
              id: params[:id],
              comment: params.reject{|k,v| [:id].include?(k)}}
          comments = cs.news_comments cs_params,current_user
          raise "create comments failed #{comments.errors.full_messages}" if comments.new_record?
          present :data, comments, with: Mobile::Entities::Comment
          present :status, 0
        end

        desc '作业留言（教师布置的作业）'
        params do
          requires :token, type: String
          requires :message,type: String, desc: '留言'
          #optional :reference_content, type: String ,desc: '引用的内容'
          #optional :reference_user_id, type: Integer,desc: '被引用的人'
        end
        post ':id/create_homework_message' do
          cs_params = {
              id: params[:id],
              token: params[:token],
              reference_content: params[:reference_content],
              bid_message: params.reject{|k,v| [:id,:token,:reference_content].include?(k)}}
          cs = CommentService.new
          message = cs.homework_message cs_params,current_user
          present :data, message, with: Mobile::Entities::Jours
          present :status, 0
        end

        desc '课程留言'
        params do
          requires :token, type: String
          requires :course_message,type: String, desc: '留言'
        end
        post ':id/leave_course_message' do
          cs_params = {
              id: params[:id],
              token: params[:token],
              new_form: params.reject{|k,v| [:id,:token].include?(k)}}
          cs = CommentService.new
          message = cs.leave_course_message cs_params,current_user
          present :data, message, with: Mobile::Entities::Jours
          present :status, 0
        end

        desc '回复留言'
        params do
          requires :token, type: String
          requires :reference_id, type: Integer,desc: '所属留言树的根留言id（最顶层的非回复的留言,留言对象中的m_parent_id）'
          requires :reference_user_id,type: Integer ,desc: '被回复的留言的作者id'
          #requires :reference_message_id,type: Integer,desc: '被回复的留言的id'
          requires :user_notes,type: String,desc: '留言的内容'
          requires :jour_type,type: String,desc: '等于父留言的jour_type'
          requires :jour_id,type:Integer, desc: '等于父留言的jour_id'
        end
        post ':reference_message_id/create_reply'do
          cs = CommentService.new
          message = cs.create_reply params,current_user
          raise "create reply failed #{message.errors.full_messages}" if message.new_record?
          present :data, message, with: Mobile::Entities::Jours
          present :status, 0
        end

        desc ' 意见反馈'
        params do
          requires :token, type: String
          requires :subject,type: String,desc: '意见'
        end
        post do
          cs_params = {
              memo: {:subject => '该贴来自手机App意见反馈' ,:content => params[:subject]},
          }
          cs = CommentService.new
          memo,message = cs.create_feedback cs_params, current_user
          raise message if memo.new_record?
          present :status, 0
        end

        desc '课程留言列表'
        params do
          optional :token, type: String
          optional :page,type:Integer,desc:'页数'
        end
        get ':id/course_message' do
          cs = CommentService.new
          jours = cs.course_messages params,(current_user.nil? ? User.find(2):current_user)
          present :data, jours, with: Mobile::Entities::Jours
          present :status, 0
        end

        desc '留言详情'
        params do
          requires :token, type: String
          requires :comment_parent_id,type:Integer,desc:'留言id'
          optional :course_id,type:Integer,desc:'课程id'
        end
        get ':comment_parent_id/comment_details' do
          cs = CommentService.new
          jour = cs.comment_detail params,current_user
          present :data, jour, with: Mobile::Entities::Jours
          present :status, 0
        end

        desc '通知评论列表'
        params do
          #requires :token, type: String
          requires :notice_id,type:Integer,desc:'通知id'
          optional :page,type:Integer,desc:'页码'
        end
        get ':notice_id/notice_comments' do
          cs = CommentService.new
          comments = cs.notice_comments params,current_user
          present :data, comments, with: Mobile::Entities::Comment
          present :status, 0
        end


      end
    end
  end
end