"""passbook LDAP Models"""

from django.db import models
from django.utils.translation import gettext as _

from passbook.core.models import Policy, Source, User


class LDAPSource(Source):
    """LDAP Authentication source"""

    TYPE_ACTIVE_DIRECTORY = 'ad'
    TYPE_GENERIC = 'generic'
    TYPES = (
        (TYPE_ACTIVE_DIRECTORY, _('Active Directory')),
        (TYPE_GENERIC, _('Generic')),
    )

    server_uri = models.TextField()
    bind_cn = models.TextField()
    bind_password = models.TextField()
    type = models.CharField(max_length=20, choices=TYPES)

    domain = models.TextField()
    base_dn = models.TextField()
    create_user = models.BooleanField(default=False)
    reset_password = models.BooleanField(default=True)

    form = 'passbook.sources.ldap.forms.LDAPSourceForm'

    @property
    def get_login_button(self):
        raise NotImplementedError()

    class Meta:

        verbose_name = _('LDAP Source')
        verbose_name_plural = _('LDAP Sources')

class LDAPGroupMembershipPolicy(Policy):
    """Policy to check if a user is in a certain LDAP Group"""

    dn = models.TextField()
    source = models.ForeignKey('LDAPSource', on_delete=models.CASCADE)

    form = 'passbook.sources.ldap.forms.LDAPGroupMembershipPolicyForm'

    def passes(self, user: User):
        """Check if user instance passes this policy"""
        raise NotImplementedError()

    class Meta:

        verbose_name = _('LDAP Group Membership Policy')
        verbose_name_plural = _('LDAP Group Membership Policys')