class Discuss < ActiveRecord::Base
  belongs_to :user
  attr_accessible :user_id, :content, :dis_id, :dis_type, :parent_id, :praise_count, :root_id, :challenge_id, :position, :reward
  default_scope :order => 'created_at desc'

  has_many :praise_tread, as: :praise_tread_object, dependent: :destroy
  has_one :praise_tread_cache, as: :object, dependent: :destroy
  acts_as_tree :foreign_key => 'parent_id'
  belongs_to :dis, :polymorphic => true
  belongs_to :last_reply, :class_name => 'Discuss', :foreign_key => 'last_reply_id'
  has_many :tidings, :class_name => 'Tiding', :as => :container , :dependent => :destroy
  after_create :send_tiding
  validates_presence_of :dis, :user, :content
  after_create :reset_counters!

  scope :visible, lambda { where(:hidden => false)}
  scope :field_for_list, lambda{
    select([:id, :content, :user_id, :updated_at, :dis_id, :dis_type, :reward, :root_id, :hidden])
  }
  scope :posts, lambda { where(:root_id => nil, :hidden => false)}

  def creator_user
    User.find(self.user_id)
  end

  # 用户评论的game
  def user_game
    myshixun = Myshixun.where(:user_id => self.user_id, :shixun_id => self.dis).first
    challenge_id = self.try(:challenge_id).nil? ? self.dis.challenges.first.try(:id) :  self.try(:challenge_id)
    game = Game.where(:myshixun_id => myshixun.try(:id), :challenge_id => challenge_id).first
  end

  # 用户评论的 myshixun
  def user_myshixun
    myshixun = Myshixun.where(:user_id => self.user_id, :shixun_id => self.dis).first
  end

  def content_detail
    self.content
  end

  def reset_counters!
    if parent && parent.id
      parent.update_attribute(:last_reply_id, parent.children.maximum(:id))
    end
    if root
      root.update_attribute(:last_reply_id, Discuss.where(:root_id => root.id).maximum(:id)) unless root.destroyed?
    end
  end

  def send_tiding
    if self.parent_id.present?
      self.tidings << Tiding.new(:user_id => self.parent.user_id, :trigger_user_id=> self.user_id, :parent_container_id => self.challenge_id, :parent_container_type => "Challenge", :belong_container_id => self.dis_id, :belong_container_type => "Shixun", :viewed => 0, :tiding_type => "Comment")
    else
      self.tidings << Tiding.new(:user_id => Challenge.find(self.challenge_id).user_id, :trigger_user_id=> self.user_id, :parent_container_id => self.challenge_id, :parent_container_type => "Challenge", :belong_container_id => self.dis_id, :belong_container_type => "Shixun", :viewed => 0, :tiding_type => "Comment")
    end
  end

  def username
    self.user.show_name
  end

  def can_delete_api(current_user, user_id)
    (current_user.admin? || current_user.id == user_id) ? true : false
  end
end