"""Middleware to handler the Star badge

"""
from django.conf import settings
from django.db.models import F

from badges_handler.models import Model3d, Badge, Creator3d
from badges_handler.views import Model3dDetailView

STAR_BADGE_DETAIL_VIEW_FUNC = Model3dDetailView.as_view()


class StarBadgeMiddleWare:
    def process_view(self, request, view_func, *args, **kwargs):
        if view_func.__name__ == STAR_BADGE_DETAIL_VIEW_FUNC.__name__\
           and request.method.lower() == 'get':
            m = Model3d.objects.filter(pk=int(args[1]['pk']))
            if not m.first(): # do nothing particular, let Django raise 404 error
                return None
            m.update(number_of_views=F('number_of_views') + 1)

            # check the number of views for the star
            views_for_star_badges = settings.BADGES_SETTINGS.get('star', None)
            if views_for_star_badges\
               and m.first().number_of_views == views_for_star_badges:
                badge_star = Badge(content_object=m.first(),
                                   name='Star Model',
                                   description='This model has more than {} views'\
                                   .format(views_for_star_badges),
                                   creator3d=m.first().creator)
                badge_star.save()
from django.conf.urls import include, url

from badges_handler.views import Model3dDetailView, Model3dCreateView,\
    check_new_user, Creator3dDetailView, Creator3dTemplateView

from django.contrib.auth import views as auth_views
from django.contrib.auth.decorators import login_required

urlpatterns = [
    # namespace = badges
    url(r'^models/(?P<pk>[0-9]+)$', Model3dDetailView.as_view(), name="detail_model"),
    url(r'^users/(?P<pk>[0-9]+)$', Creator3dDetailView.as_view(), name="users_model"),
    url(r'^models/create$', login_required(Model3dCreateView.as_view()), name="model_create"),
    url(r'^users/create$', Creator3dTemplateView.as_view(), name="user_create"),
    url(r'^users/check$', check_new_user, name='check'),
    url(r'^login', auth_views.login, {'template_name': 'badges_handler/login.html'},
        name='login'),
    url(r'^logout', auth_views.logout, {'next_page': '/'}, name='logout'),
]