class Notification::EventPayload < Notification::DefaultPayload
  include ExcerptHelper

  def title
    case event.action
    when "comment_created"
      "RE: #{card_title}"
    else
      card_title
    end
  end

  def body
    case event.action
    when "comment_created"
      format_excerpt(event.eventable.body, length: 200)
    when "card_assigned"
      "Assigned to you by #{event.creator.name}"
    when "card_published"
      "Added by #{event.creator.name}"
    when "card_closed"
      card.closure ? "Moved to Done by #{event.creator.name}" : "Closed by #{event.creator.name}"
    when "card_reopened"
      "Reopened by #{event.creator.name}"
    when "card_triaged"
      if column_name.present?
        "Moved to #{column_name} by #{event.creator.name}"
      else
        "Moved by #{event.creator.name}"
      end
    when "card_sent_back_to_triage"
      "Moved back to Maybe? by #{event.creator.name}"
    when "card_board_changed", "card_collection_changed"
      if new_location_name.present?
        "Moved to #{new_location_name} by #{event.creator.name}"
      else
        "Moved by #{event.creator.name}"
      end
    when "card_title_changed"
      if new_title.present?
        "Renamed to #{new_title} by #{event.creator.name}"
      else
        "Renamed by #{event.creator.name}"
      end
    when "card_postponed"
      "Moved to Not Now by #{event.creator.name}"
    when "card_auto_postponed"
      "Moved to Not Now due to inactivity"
    else
      "Updated by #{event.creator.name}"
    end
  end

  def url
    case event.action
    when "comment_created"
      card_url_with_comment_anchor(event.eventable)
    else
      card_url(card)
    end
  end

  def category
    case event.action
    when "card_assigned" then "assignment"
    when "comment_created" then "comment"
    else "card"
    end
  end

  def high_priority?
    event.action.card_assigned?
  end

  private
    def event
      notification.source
    end

    def card_title
      card.title.presence || "Card #{card.number}"
    end

    def event_particulars
      event.particulars.dig("particulars") || {}
    end

    def column_name
      event_particulars["column"]
    end

    def new_location_name
      event_particulars["new_board"] || event_particulars["new_collection"]
    end

    def new_title
      event_particulars["new_title"]
    end

    def card_url_with_comment_anchor(comment)
      Rails.application.routes.url_helpers.card_url(
        comment.card,
        anchor: ActionView::RecordIdentifier.dom_id(comment),
        **url_options
      )
    end
end
