# frozen_string_literal: true

Fabricator(:notification) do
  transient :post
  notification_type Notification.types[:mentioned]
  high_priority false
  user
  topic { |attrs| attrs[:post]&.topic || Fabricate(:topic, user: attrs[:user]) }
  post_number { |attrs| attrs[:post]&.post_number }
  data '{"poison":"ivy","killer":"croc"}'
end

Fabricator(:quote_notification, from: :notification) do
  notification_type Notification.types[:quoted]
  user
  topic { |attrs| Fabricate(:topic, user: attrs[:user]) }
end

Fabricator(:private_message_notification, from: :notification) do
  notification_type Notification.types[:private_message]
  high_priority true
  data do |attrs|
    post = attrs[:post] || Fabricate(:post, topic: attrs[:topic], user: attrs[:user])
    {
      topic_title: attrs[:topic].title,
      original_post_id: post.id,
      original_post_type: post.post_type,
      original_username: post.user.username,
      revision_number: nil,
      display_username: post.user.username,
    }.to_json
  end
end

Fabricator(:bookmark_reminder_notification, from: :notification) do
  notification_type Notification.types[:bookmark_reminder]
  high_priority true
  data do |attrs|
    post = attrs[:post] || Fabricate(:post, topic: attrs[:topic], user: attrs[:user])
    {
      topic_title: attrs[:topic].title,
      original_post_id: post.id,
      original_post_type: post.post_type,
      original_username: post.user.username,
      revision_number: nil,
      display_username: post.user.username,
      bookmark_name: "Check out Mr Freeze's opinion here",
    }.to_json
  end
end

Fabricator(:replied_notification, from: :notification) do
  notification_type Notification.types[:replied]
  data do |attrs|
    post = attrs[:post] || Fabricate(:post, topic: attrs[:topic], user: attrs[:user])
    {
      topic_title: attrs[:topic].title,
      original_post_id: post.id,
      original_username: post.user.username,
      revision_number: nil,
      display_username: post.user.username,
    }.to_json
  end
end

Fabricator(:posted_notification, from: :notification) do
  notification_type Notification.types[:posted]
  data do |attrs|
    post = attrs[:post] || Fabricate(:post, topic: attrs[:topic], user: attrs[:user])
    {
      topic_title: attrs[:topic].title,
      original_post_id: post.id,
      original_post_type: post.post_type,
      original_username: post.user.username,
      revision_number: nil,
      display_username: post.user.username,
    }.to_json
  end
end

Fabricator(:mentioned_notification, from: :notification) do
  notification_type Notification.types[:mentioned]
  data do |attrs|
    {
      topic_title: attrs[:topic].title,
      original_post_id: attrs[:post].id,
      original_post_type: attrs[:post].post_type,
      original_username: attrs[:post].user.username,
      revision_number: nil,
      display_username: attrs[:post].user.username,
    }.to_json
  end
end

Fabricator(:watching_first_post_notification, from: :notification) do
  notification_type Notification.types[:watching_first_post]
  data do |attrs|
    {
      topic_title: attrs[:topic].title,
      original_post_id: attrs[:post].id,
      original_post_type: attrs[:post].post_type,
      original_username: attrs[:post].user.username,
      revision_number: nil,
      display_username: attrs[:post].user.username,
    }.to_json
  end
end