class PraiseTreadController < ApplicationController
  
  accept_api_auth :tread_plus,:praise_plus
  before_filter :require_login,:only => [:praise_plus,:tread_plus]
  
  def praise_plus
    @obj = nil
    @activity = false

    if request.get?
      @obj_id = params[:obj_id]
      @obj_type = params[:obj_type]
      if !params[:user_activity_id].nil? && !params[:type].nil?
        @user_activity_id = params[:user_activity_id]
        @type = params[:type]
        @activity = true
      end
      # @is_in_list = nil
      @obj = find_object_by_type_and_id(@obj_type,@obj_id)
      pts = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",@obj_id,@obj_type.to_s,User.current.id)
      unless pts.empty?
        respond_to do |format|
          format.js
        end
        return
      end
      @horizontal = params[:horizontal].downcase == "false" ? false:true if params[:horizontal]
      # if @obj.respond_to?("author_id")
      #   author_id = @obj.author_id
      # elsif @obj.respond_to?("user_id")
      #   author_id = @obj.user_id
      # end
      # unless author_id == User.current.id
         praise_tread_plus(@obj_type,@obj_id,1)
      # end
      respond_to do |format|
        format.js
      end
    end
  end

  def praise_minus
    @obj = nil
    @activity = false
    if request.get?
      #@obj = params[:obj]  # 传的是对象，最后变成id了
      #首先更新praise_tread 表 删除关注记录
      #@pt = PraiseTread.find_by_user_id_and_praise_tread_object_id_and_praise_tread_object_type(User.current.id,@obj,"user")
      @obj_id = params[:obj_id]
      @obj_type = params[:obj_type]
      if !params[:user_activity_id].nil? && !params[:type].nil?
        @user_activity_id = params[:user_activity_id]
        @type = params[:type]
        @activity = true
      end
      @obj = find_object_by_type_and_id(@obj_type,@obj_id)
      @pt = PraiseTread.where("praise_tread_object_id=? and praise_tread_object_type=? and user_id=?",@obj_id,@obj_type.to_s,User.current.id).first
      if @pt.nil?
        respond_to do |format|
          format.js
        end
        return
      end
      @pt.delete if !@pt.nil?
      #再更新praise_tread_cache表 使相应的记录减1 当为0时删除
      @ptc = PraiseTreadCache.where("object_id=? and object_type=?",@obj_id,@obj_type.to_s).first
      @ptc.minus(1) if !@ptc.nil?
      if @ptc.praise_num == 0
        @ptc.delete
      end

    end
    #@obj = User.find_by_id(@obj)
    respond_to do |format|
      format.js
    end
  end

  def tread_plus
    @obj = nil
    # @is_in_list = nil
    if request.get?
      @obj_id = params[:obj_id]
      @obj_type = params[:obj_type]
      #@horizontal = params[:horizontal].downcase == "false" ? false:true
      @obj = find_object_by_type_and_id(@obj_type,@obj_id)
      unless @obj.author_id == User.current.id
        praise_tread_plus(@obj_type,@obj_id,0)
      end

    end
  end

  def tread_minus
    respond_to do |format|
      format.html
      format.js
    end
  end

  private

  def find_object_by_type_and_id(type,id)
    @obj = nil
    case type
      when  'Memo'
        @obj = Memo.find_by_id(id)
      when 'Message'
        @obj = Message.find_by_id(id)
      when 'HomeworkCommon'
        @obj = HomeworkCommon.find_by_id(id)
      when 'JournalsForMessage'
        @obj = JournalsForMessage.find_by_id(id)
      when 'News'
        @obj = News.find_by_id(id)
      when 'Comment'
        @obj = Comment.find_by_id(id)
      when 'Journal'
        @obj = Journal.find_by_id(id)
      when 'BlogComment'
        @obj = BlogComment.find_by_id(id)
      when 'OrgDocumentComment'
        @obj = OrgDocumentComment.find_by_id(id)
      when 'User'
        @obj = User.find_by_id(id)
      when 'Issue'
        @obj = Issue.find_by_id(id)
      when 'Project'
        @obj = Project.find_by_id(id)
      when 'Bid'
        @obj = Bid.find_by_id(id)
      when 'Contest'
        @obj = Contest.find_by_id(id)
      else
        @obj = nil
    end
    return @obj
  end

  def praise_tread_plus(type,id,flag)
    unless id.nil? and type.nil?
      #首先创建或更新praise_tread 表
      @pt = PraiseTread.new
      @pt.user_id = User.current.id
      @pt.praise_tread_object_id = id.to_i
      @pt.praise_tread_object_type = type
      @pt.praise_or_tread = flag
      @pt.save
      # end

      #再创建或更新praise_tread_cache表
      #@ptc = PraiseTreadCache.find_by_object_id_and_object_type(id,type)
      @ptc = PraiseTreadCache.where("object_id = ? and object_type = ?",id.to_i,type).first
      @ptc = @ptc.nil? ? PraiseTreadCache.new : @ptc
      @ptc.object_id = id.to_i
      @ptc.object_type = type
      @ptc.save
      @ptc.plus(flag,1)
    end
  end

end
