# frozen_string_literal: true

desc "Backfill sentiment for all posts"
task "ai:sentiment:backfill", [:start_post] => [:environment] do |_, args|
  public_categories = Category.where(read_restricted: false).pluck(:id)

  Post
    .joins("INNER JOIN topics ON topics.id = posts.topic_id")
    .joins(
      "LEFT JOIN classification_results ON classification_results.target_id = posts.id AND classification_results.target_type = 'Post'",
    )
    .where("classification_results.target_id IS NULL")
    .where("posts.id >= ?", args[:start_post].to_i || 0)
    .where("category_id IN (?)", public_categories)
    .where(posts: { deleted_at: nil })
    .where(topics: { deleted_at: nil })
    .order("posts.id ASC")
    .find_each do |post|
      print "."
      DiscourseAi::PostClassificator.new(
        DiscourseAi::Sentiment::SentimentClassification.new,
      ).classify!(post)
    end
end
