from misago.conf import settings
from misago.users.activepostersranking import get_active_posters_ranking
from misago.users.online.utils import make_users_status_aware
from misago.users.serializers import UserCardSerializer


class ActivePosters(object):
    def __init__(self, request):
        ranking = get_active_posters_ranking()
        make_users_status_aware(request.user, ranking['users'], fetch_state=True)

        self.count = ranking['users_count']
        self.tracked_period = settings.MISAGO_RANKING_LENGTH
        self.users = ranking['users']

    def get_frontend_context(self):
        return {
            'tracked_period': self.tracked_period,
            'results': ScoredUserSerializer(self.users, many=True).data,
            'count': self.count,
        }

    def get_template_context(self):
        return {
            'tracked_period': self.tracked_period,
            'users': self.users,
            'users_count': self.count,
        }


ScoredUserSerializer = UserCardSerializer.extend_fields('meta')