# frozen_string_literal: true

class DiscourseAi::Embeddings::SemanticTopicQuery < TopicQuery
  def list_semantic_related_topics(topic)
    query_opts = {
      skip_ordering: true,
      per_page: SiteSetting.ai_embeddings_semantic_related_topics,
      unordered: true,
    }

    if !SiteSetting.ai_embeddings_semantic_related_include_closed_topics
      query_opts[:status] = "open"
    end

    list =
      create_list(:semantic_related, query_opts) do |topics|
        candidate_ids = DiscourseAi::Embeddings::SemanticRelated.new.related_topic_ids_for(topic)

        list =
          topics
            .where.not(id: topic.id)
            .where(id: candidate_ids)
            .order("array_position(ARRAY#{candidate_ids}, topics.id)") # array_position forces the order of the topics to be preserved

        list = remove_muted(list, @user, query_opts)
      end
  end
end
