# frozen_string_literal: true

class GroupedSearchResultSerializer < ApplicationSerializer
  has_many :posts, serializer: SearchPostSerializer
  has_many :users, serializer: SearchResultUserSerializer
  has_many :categories, serializer: BasicCategorySerializer
  has_many :tags, serializer: TagSerializer
  has_many :groups, serializer: BasicGroupSerializer
  attributes :more_posts,
             :more_users,
             :more_categories,
             :term,
             :search_log_id,
             :more_full_page_results,
             :can_create_topic,
             :error,
             :extra

  def search_log_id
    object.search_log_id
  end

  def include_search_log_id?
    search_log_id.present?
  end

  def include_tags?
    SiteSetting.tagging_enabled
  end

  def can_create_topic
    scope.can_create?(Topic)
  end

  def extra
    extra = {}

    if object.can_lazy_load_categories
      extra[:categories] = ActiveModel::ArraySerializer.new(
        object.extra_categories,
        each_serializer: BasicCategorySerializer,
      )
    end

    extra
  end
end