from django.views import generic
from django.urls import reverse, reverse_lazy
from django.shortcuts import get_object_or_404

from .models import Content, Category


class ContentCategoryList(generic.ListView):
    """Affiche les contenus d'une catégorie."""
    model = Content
    context_object_name = "contents"
    template_name = "content/content_list.html"

    def get_queryset(self):
        pk = self.kwargs['pk']
        category = get_object_or_404(Category, pk=pk)
        return Content.objects.filter(category=category)

    def get_context_data(self, **kwargs):
        context = super(generic.ListView, self).get_context_data(**kwargs)
        pk = self.kwargs['pk']
        category = get_object_or_404(Category, pk=pk)
        context['category'] = category
        return context


class CreateCategory(generic.CreateView):
    """Création de catégorie."""
    model = Category
    fields = '__all__'
    template_name = "edit.html"

    def get_context_data(self, **kwargs):
        context = super(generic.CreateView, self).get_context_data(**kwargs)
        context['title'] = "Création de catégorie"
        return context


class DeleteCategory(generic.DeleteView):
    """Suppression de catégorie"""
    model = Category
    success_url = reverse_lazy('settings:index')
    template_name = "confirm_delete.html"


class EditCategory(generic.UpdateView):
    """Édition de catégorie."""
    model = Category
    fields = '__all__'
    template_name = "edit.html"
    def get_context_data(self, **kwargs):
        context = super(generic.UpdateView, self).get_context_data(**kwargs)
        context['title'] = "Édition de " + self.object.name
        return context


class CreateContent(generic.CreateView):
    """Création de contenu."""
    model = Content
    fields = [
        'name',
        'category',
        'file'
    ]
    template_name = "edit.html"
    extra_context = {
        'title' : 'Envoi de contenu',
        'validate' : 'Envoyer'
    }

    def get_success_url(self):
        return self.object.school_owner.get_absolute_url()

    def form_valid(self, form):
        form.instance.school_owner = self.request.user.userprofile.school
        r = super().form_valid(form)
        return r


class DeleteContent(generic.DeleteView):
    """Suppression de contenu"""
    model = Content
    template_name = "confirm_delete.html"

    def get_success_url(self):
        return self.object.school_owner.get_absolute_url()


class EditContent(generic.UpdateView):
    """Édition d'un contenu"""
    model = Content
    template_name = "edit.html"
    fields = [
        'name',
        'category',
        'file'
    ]
    template_name = "edit.html"
    extra_context = {
        'title' : 'Édition de contenu',
        'validate' : 'Envoyer'
    }

    def get_success_url(self):
        return self.object.school_owner.get_absolute_url()