from django.http import HttpResponseRedirect, Http404
from django.utils.translation import get_language
from django.views import generic
from django.urls import reverse
from nsfw import views as nsfw
from .models import Page, PageContent


def index(request):
    default_page = Page.objects.filter(default=True).first()
    return HttpResponseRedirect(reverse('page', args=(default_page.slug, )))


class PageView(generic.DetailView):
    model = PageContent
    context_object_name = 'page'
    template_name = 'pages/page.html'

    def dispatch(self, request, *args, **kwargs):
        if self.get_object().page.is_nsfw:
            if not nsfw.is_nsfw_allowed(request):
                return nsfw.redirect(request)
            else:
                nsfw.alert(request)
        return super().dispatch(request, *args, **kwargs)

    def get_object(self):
        obj = PageContent.objects.filter(
            language=get_language(),
            page__slug=self.kwargs['slug']
        ).first()
        if obj is None:
            raise Http404('Page not found: %s' % self.kwargs['slug'])
        return obj