# frozen_string_literal: true

require "faker"

Fabricator(:reviewable) do
  reviewable_by_moderator true
  type "ReviewableUser"
  created_by { Fabricate(:user) }
  target_id { Fabricate(:user).id }
  target_type "User"
  target_created_by { Fabricate(:user) }
  category
  score 1.23
  payload { { list: [1, 2, 3], name: "bandersnatch" } }
  status { :pending }
end

Fabricator(:reviewable_queued_post_topic, class_name: :reviewable_queued_post) do
  reviewable_by_moderator true
  type "ReviewableQueuedPost"
  created_by { Fabricate(:user) }
  target_created_by { Fabricate(:user) }
  category
  payload do
    {
      raw: "hello world post contents.",
      title: "queued post title",
      tags: %w[cool neat],
      extra: "some extra data",
      archetype: "regular",
    }
  end
end

Fabricator(:suspect_user_reviewable, class_name: :reviewable_user) do
  reviewable_by_moderator true
  created_by { Discourse.system_user }
  target { Fabricate(:user, approved: false) }
  payload do |attrs|
    {
      "username" => attrs[:target].username,
      "name" => attrs[:target].name,
      "email" => attrs[:target].email,
    }
  end
  status { :pending }

  after_create do |reviewable|
    reviewable.add_score(
      Discourse.system_user,
      ReviewableScore.types[:needs_approval],
      reason: :suspect_user,
      force_review: true,
    )
  end
end

Fabricator(:reviewable_queued_post) do
  reviewable_by_moderator true
  type "ReviewableQueuedPost"
  created_by { Fabricate(:user) }
  target_created_by { Fabricate(:user) }
  topic
  payload do
    {
      raw: "hello world post contents.",
      reply_to_post_number: 1,
      via_email: true,
      raw_email: "store_me",
      auto_track: true,
      custom_fields: {
        hello: "world",
      },
      cooking_options: {
        cat: "hat",
      },
      cook_method: Post.cook_methods[:raw_html],
      image_sizes: {
        "http://foo.bar/image.png" => {
          "width" => 0,
          "height" => 222,
        },
      },
    }
  end
end

Fabricator(:reviewable_queued_long_post, from: :reviewable_queued_post) do
  reviewable_by_moderator true
  type "ReviewableQueuedPost"
  created_by { Fabricate(:user) }
  target_created_by { Fabricate(:user) }
  topic
  payload do
    {
      raw: Faker::DiscourseMarkdown.sandwich(sentences: 6, repeat: 3),
      reply_to_post_number: 1,
      via_email: true,
      raw_email: "store_me",
      auto_track: true,
      custom_fields: {
        hello: "world",
      },
      cooking_options: {
        cat: "hat",
      },
      cook_method: Post.cook_methods[:raw_html],
      image_sizes: {
        "http://foo.bar/image.png" => {
          "width" => 0,
          "height" => 222,
        },
      },
    }
  end
end

Fabricator(:reviewable_flagged_post) do
  reviewable_by_moderator true
  type "ReviewableFlaggedPost"
  created_by { Fabricate(:user) }
  target_created_by { Fabricate(:user) }
  topic
  target_type "Post"
  target { |attrs| Fabricate(:post, topic: attrs[:topic]) }
  reviewable_scores { |attrs| [Fabricate.build(:reviewable_score, reviewable_id: attrs[:id])] }
end

Fabricator(:reviewable_user) do
  reviewable_by_moderator true
  type "ReviewableUser"
  created_by { Fabricate(:user) }
  target_type "User"
  target { Fabricate(:user) }
end
