#coding=utf-8

class AtMessage < ActiveRecord::Base
  belongs_to :user
  belongs_to :sender, class_name: "User", foreign_key: "sender_id"
  attr_accessible :at_message, :container, :viewed, :user_id, :sender_id
  belongs_to :at_message, polymorphic: true
  belongs_to :container, polymorphic: true

  has_many :message_alls, :class_name => 'MessageAll',:as =>:message, :dependent => :destroy
  validates :user_id, :sender_id, :at_message_id, :at_message_type, presence: true

  after_create :add_user_message

  scope :unviewed, ->(type, id){
    where(at_message_type: type, at_message_id:id, viewed: false)
  }

  def viewed!
    update_attribute :viewed, true
  end

  def at_valid?
    return true if at_message_type == 'Issue'
    return true if 'Journal' == at_message_type
    return true if 'JournalsForMessage' == at_message_type
    return true if 'Message' == at_message_type
    false
  end

  def add_user_message
    if MessageAll.where(message_type: self.class.name,message_id: self.id).empty?
      self.message_alls << MessageAll.new(:user_id => self.user_id)
    end
  end

  def subject
    case at_message_type
      when "Issue"
        "新建问题: " + at_message.subject
      when "Journal"
        "问题留言: " + at_message.journalized.subject
      when 'Message'
        if(at_message.topic?)
          "发布新帖: "
        else
          "回复帖子: "
        end +  at_message.subject
      when 'JournalsForMessage'
        if at_message.jour_type == 'Principal'
          "留言: 在#{at_message.at_user.show_name}主页中留言"
        else
          "作业: #{at_message.jour.name} 中留言"
        end
      else
        logger.error "error type: #{at_message_type}"
    end
  end

  def description
    case at_message_type
      when "Issue"
        at_message.description
      when "Journal"
        at_message.notes
      when 'Message'
        at_message.content
      when "JournalsForMessage"
        at_message.notes
      else
        logger.error "error type: #{at_message_type}"
    end
  end

  def author
    case at_message_type
      when "Issue"
        at_message.author
      when "Journal"
        at_message.user
      when 'Message'
        at_message.author
      when 'JournalsForMessage'
        at_message.user
      else
        logger.error "error type: #{at_message_type}"
    end
  end

  def url
    case at_message_type
      when "Issue"
        {controller: :issues, action: :show, id: at_message}
      when "Journal"
        {controller: :issues, action: :show, id: at_message.journalized}
      when 'Message'
        {controller: :boards, action: :show, project_id: at_message.board.project, id: at_message.board}
      when 'JournalsForMessage'
        if at_message.jour_type == 'Principal'
          {controller: :users, action: :user_messages, id: at_message.at_user}
        else
          {controller: :homework_common, action: :index, course: at_message.jour.course_id}
        end

      else
        logger.error "error type: #{at_message_type}"
    end

  end

end
