from django.utils import six

from judge.ratings import rating_class, rating_name, rating_progress
from . import registry


def _get_rating_value(func, obj):
    if obj is None:
        return None

    if isinstance(obj, six.integer_types):
        return func(obj)
    else:
        return func(obj.rating)


@registry.function("rating_class")
def get_rating_class(obj):
    return _get_rating_value(rating_class, obj) or "rate-none"


@registry.function(name="rating_name")
def get_name(obj):
    return _get_rating_value(rating_name, obj) or "Unrated"


@registry.function(name="rating_progress")
def get_progress(obj):
    return _get_rating_value(rating_progress, obj) or 0.0


@registry.function
@registry.render_with("user/rating.html")
def rating_number(obj):
    return {"rating": obj}