from django.contrib import messages
from django.utils.translation import ugettext_lazy as _

from misago.admin.views import generic
from misago.core import cachebuster

from misago.threads.models import Label
from misago.threads.forms.admin import LabelForm


class LabelsAdmin(generic.AdminBaseMixin):
    root_link = 'misago:admin:forums:labels:index'
    Model = Label
    Form = LabelForm
    templates_dir = 'misago/admin/labels'
    message_404 = _("Requested thread label does not exist.")

    def handle_form(self, form, request, target):
        target.save()
        target.forums.clear()
        if form.cleaned_data.get('forums'):
            target.forums.add(*[f for f in form.cleaned_data.get('forums')])
        Label.objects.clear_cache()

        if self.message_submit:
            messages.success(
                request, self.message_submit % {'name': target.name})


class LabelsList(LabelsAdmin, generic.ListView):
    ordering = (('name', None),)


class NewLabel(LabelsAdmin, generic.ModelFormView):
    message_submit = _('New label "%(name)s" has been saved.')


class EditLabel(LabelsAdmin, generic.ModelFormView):
    message_submit = _('Label "%(name)s" has been edited.')


class DeleteLabel(LabelsAdmin, generic.ButtonView):
    def button_action(self, request, target):
        target.delete()
        message = _('Label "%(name)s" has been deleted.')
        messages.success(request, message % {'name': target.name})