class PraiseTread < ActiveRecord::Base
  attr_accessible :user_id,:praise_tread_object_id,:praise_tread_object_type,:praise_or_tread
  belongs_to :user
  belongs_to :praise_tread_object, polymorphic: true
  #after_create :be_user_score
  #after_destroy :down_user_score
  include UserScoreHelper
  def self.find_object_by_type_and_id(type,id)
    @obj = nil
    case type
      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)
      when  'Memo'
        @obj = Memo.find_by_id(id)
      when 'Message'
        @obj = Message.find_by_id(id)
    end
    return @obj
  end

  # 获取裁定对象为Message时Message所属的项目或课程
  def project
    project = nil
    if self.praise_tread_object_type == 'Message' || self.praise_tread_object_type == 'Issues'
      obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id)
      project = obj.project
    end
    project
  end

  #更新用户分数  - by zjc
  def be_user_score
    #踩贴吧或讨论区帖子
    if self.praise_or_tread == 0 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message')
      obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id)
      target_user = obj.author
      UserScore.skill(:treaded_by_user, User.current,target_user,self, { praise_tread_id: self.id })
      update_tread(self.user,1)
      update_tread(target_user,1)
      unless self.project.nil?
        update_tread(self.user,2,self.project)
        update_tread(target_user,2,self.project)
      end
    #顶贴吧或讨论区帖子
    elsif self.praise_or_tread == 1 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message')
      obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id)
      target_user = obj.author
      UserScore.skill(:praised_by_user, User.current,target_user,self,{ praise_tread_id: self.id })
      update_praise(target_user,1)
      unless self.project.nil?
        update_praise(target_user,2,self.project)
      end
      #更新用户等级
      UserLevels.update_user_level(target_user)
    end
  end

  def down_user_score
    #踩贴吧或讨论区帖子
    if self.praise_or_tread == 0 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message')
      obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id)
      target_user = obj.author
      #UserScore.skill(:treaded_by_user, User.current,target_user,self, { praise_tread_id: self.id })
      update_tread(self.user,1)
      update_tread(target_user,1)
      unless self.project.nil?
        update_tread(self.user,2,self.project)
        update_tread(target_user,2,self.project)
      end
      #顶贴吧或讨论区帖子
    elsif self.praise_or_tread == 1 && (self.praise_tread_object_type == 'Issue' || self.praise_tread_object_type == 'Message')
      obj = PraiseTread.find_object_by_type_and_id(self.praise_tread_object_type,praise_tread_object_id)
      target_user = obj.author
      #UserScore.skill(:praised_by_user, User.current,target_user,self,{ praise_tread_id: self.id })
      update_praise(target_user,1)
      unless self.project.nil?
        update_praise(target_user,2,self.project)
      end
      #更新用户等级
      UserLevels.update_user_level(target_user)
    end
  end

  def self.praised(activity)
    self.where(praise_tread_object_id: activity.id,
               praise_tread_object_type: activity.class.to_s,
               user_id: User.current.id).empty?
  end

end