# This class performs calculations to determine if a user qualifies for
# the Leader (3) trust level.
class LeaderRequirements

  include ActiveModel::Serialization

  attr_accessor :time_period,
                :days_visited, :min_days_visited,
                :num_topics_with_replies, :min_topics_with_replies,
                :num_topics_replied_to, :min_topics_replied_to,
                :num_flagged_posts, :max_flagged_posts

  def initialize(user)
    @user = user
  end

  # TODO
  # def requirements_met?
  #   false
  # end

  def time_period
    100 # days
  end

  def days_visited
    @user.user_visits.where("visited_at > ? and posts_read > 0", time_period.days.ago).count
  end

  def min_days_visited
    time_period * 0.5
  end

  def num_topics_with_replies
    @user.topics.where('posts_count > 1 AND participant_count > 1 AND created_at > ?', time_period.days.ago).count
  end

  def min_topics_with_replies
    5
  end

  def num_topics_replied_to
    @user.posts.select('distinct topic_id').where('created_at > ? AND post_number > 1', time_period.days.ago).count
  end

  def min_topics_replied_to
    10
  end

  def num_flagged_posts
    @user.posts.where('created_at > ? AND (off_topic_count > 0 OR spam_count > 0 OR illegal_count > 0 OR inappropriate_count > 0 OR notify_moderators_count > 0)', time_period.days.ago).count
  end

  def max_flagged_posts
    5 # TODO what should it be?
  end
end