"""passbook multi-factor authentication engine"""
from django.forms import ModelForm
from django.http import HttpRequest
from django.utils.translation import gettext as _
from django.views.generic import TemplateView

from passbook.core.models import User
from passbook.factors.view import AuthenticationView
from passbook.lib.config import CONFIG


class AuthenticationFactor(TemplateView):
    """Abstract Authentication factor, inherits TemplateView but can be combined with FormView"""

    form: ModelForm = None
    required: bool = True
    authenticator: AuthenticationView
    pending_user: User
    request: HttpRequest = None
    template_name = "login/form_with_user.html"

    def __init__(self, authenticator: AuthenticationView):
        self.authenticator = authenticator
        self.pending_user = None

    def get_context_data(self, **kwargs):
        kwargs["config"] = CONFIG.y("passbook")
        kwargs["is_login"] = True
        kwargs["title"] = _("Log in to your account")
        kwargs["primary_action"] = _("Log in")
        kwargs["user"] = self.pending_user
        return super().get_context_data(**kwargs)