class Notification < ActiveRecord::Base
  belongs_to :user, counter_cache: true
  belongs_to :notifiable, polymorphic: true

  scope :unread, -> { all }
  scope :recent, -> { order(id: :desc) }
  scope :for_render, -> { includes(:notifiable) }

  def timestamp
    notifiable.created_at
  end

  def mark_as_read
    self.destroy
  end

  def self.add(user_id, notifiable)
    if notification = Notification.find_by(user_id: user_id, notifiable: notifiable)
      Notification.increment_counter(:counter, notification.id)
    else
      Notification.create!(user_id: user_id, notifiable: notifiable)
    end
  end

  def notifiable_title
    case notifiable.class.name
    when "ProposalNotification"
      notifiable.proposal.title
    when "Comment"
      notifiable.commentable.title
    else
      notifiable.title
    end
  end

  def notifiable_action
    case notifiable_type
    when "ProposalNotification"
      "proposal_notification"
    when "Comment"
      "replies_to"
    else
      "comments_on"
    end
  end

  def linkable_resource
    notifiable.is_a?(ProposalNotification) ? notifiable.proposal : notifiable
  end
end