"""passbook administration forms"""
from django import forms
from django.conf import settings
from django.contrib.admin.widgets import FilteredSelectMultiple
from django.utils.translation import gettext as _

from passbook.factors.forms import GENERAL_FIELDS
from passbook.factors.password.models import PasswordFactor
from passbook.lib.utils.reflection import path_to_class


def get_authentication_backends():
    """Return all available authentication backends as tuple set"""
    for backend in settings.AUTHENTICATION_BACKENDS:
        klass = path_to_class(backend)
        yield backend, getattr(klass(), 'name', '%s (%s)' % (klass.__name__, klass.__module__))


class PasswordForm(forms.Form):
    """Password authentication form"""

    password = forms.CharField(widget=forms.PasswordInput(attrs={
        'placeholder': _('Password'),
        'autofocus': 'autofocus',
        'autocomplete': 'current-password'
    }))


class PasswordFactorForm(forms.ModelForm):
    """Form to create/edit Password Factors"""

    class Meta:

        model = PasswordFactor
        fields = GENERAL_FIELDS + ['backends', 'password_policies', 'reset_factors']
        widgets = {
            'name': forms.TextInput(),
            'order': forms.NumberInput(),
            'policies': FilteredSelectMultiple(_('policies'), False),
            'backends': FilteredSelectMultiple(_('backends'), False,
                                               choices=get_authentication_backends()),
            'password_policies': FilteredSelectMultiple(_('password policies'), False),
            'reset_factors': FilteredSelectMultiple(_('reset factors'), False),
        }