module Moderator
  module Dashboard
    module Queries
      class PostFlag
        attr_reader :post, :count

        def self.all(min_date)
          sql = <<-EOS
            SELECT post_flags.post_id, count(*)
            FROM post_flags
            JOIN posts ON posts.id = post_flags.post_id
            WHERE
              post_flags.created_at > ?
              AND post_flags.reason <> ?
              AND posts.is_deleted = false
              and posts.is_pending = false
            GROUP BY post_flags.post_id
            ORDER BY count(*) DESC
            LIMIT 10
          EOS

          ActiveRecord::Base.select_all_sql(sql, min_date, "Unapproved in three days").map {|x| new(x)}
        end

        def initialize(hash)
          @post = Post.find(hash["post_id"])
          @count = hash["count"]
        end
      end
    end
  end
end
