import djconfig
from django.contrib.auth.views import LoginView as BaseLoginView
from django.http import Http404
from django.views.generic import TemplateView, FormView

from cabinet.utils import CabinetViewMixin


class CabinetIndexView(CabinetViewMixin, TemplateView):
    template_name = 'cabinet/index.html'
    title = 'Cabinet home'


class LoginView(BaseLoginView):
    template_name = 'cabinet/login.html'
    redirect_authenticated_user = True

    def get_context_data(self, **kwargs):
        ctx = super(LoginView, self).get_context_data(**kwargs)
        ctx['title'] = 'Login'
        return ctx

    def form_valid(self, form):
        res = super(LoginView, self).form_valid(form)
        if not self.request.POST.get('remember'):
            self.request.session.set_expiry(0)
        return res


class AdminConfigView(CabinetViewMixin, FormView):
    template_name = 'cabinet/admin_config.html'

    def get_sidebar_section(self):
        return 'admin_{}'.format(self.get_form_class().slug)

    def get_success_url(self):
        return ''

    def get_title(self):
        return '{} config'.format(self.get_form_class().title)

    def get_form_class(self):
        for form in djconfig.config._registry:
            if form.slug == self.kwargs.get('slug'):
                return form
        raise Http404()

    def form_valid(self, form):
        form.save()
        return super(AdminConfigView, self).form_valid(form)