from elixir import *
from art import Art
from floof.lib.dbhelpers import find_or_create, update_or_create

class Rating(Entity):
    art = ManyToOne('Art', ondelete='cascade')
    rater = ManyToOne('User', ondelete='cascade')
    score = Field(Integer)

    options = {-1:"sucks", 0:"undecided", 1:"good", 2:"great"}
    default = 0

Rating.reverse_options = dict (zip(Rating.options.values(), Rating.options.keys()))


class RatingMixin(object):
    def rate(self, score, user):
        return update_or_create(Rating, {"rater":user, "art":self}, {"score":score})

    def user_score(self, user):
        rating = Rating.get_by(rater=user, art=self)
        if rating:
            return rating.score
        return Rating.default

Art.__bases__ += (RatingMixin,)