class CategoryFeaturedTopic < ActiveRecord::Base
  belongs_to :category
  belongs_to :topic

  # Populates the category featured topics
  def self.feature_topics

    transaction do
      Category.all.each do |c|
        feature_topics_for(c)
        CategoryFeaturedUser.feature_users_in(c)
      end
    end

    nil
  end

  def self.feature_topics_for(c)
    return unless c.present?

    CategoryFeaturedTopic.transaction do
      exec_sql "DELETE FROM category_featured_topics WHERE category_id = :category_id", category_id: c.id
      exec_sql "INSERT INTO category_featured_topics (category_id, topic_id, created_at, updated_at)
                SELECT :category_id,
                       ft.id,
                       CURRENT_TIMESTAMP,
                       CURRENT_TIMESTAMP
                FROM topics AS ft
                WHERE ft.category_id = :category_id
                  AND ft.visible
                  AND ft.deleted_at IS NULL
                  AND ft.archetype <> '#{Archetype.private_message}'
                ORDER BY ft.bumped_at DESC
                LIMIT :featured_limit",
                category_id: c.id,
                featured_limit: SiteSetting.category_featured_topics
    end
  end

end