from django import forms
from django.core.validators import EmailValidator
from django.utils.translation import gettext_lazy as _

from antispam.models import ToxicDomain


class AntiSpamEmailValidator(EmailValidator):
    def __call__(self, value: str):
        super().__call__(value)
        domain_part = value.rsplit("@", 1)[1]
        if ToxicDomain.objects.filter(domain=domain_part).exists():
            raise forms.ValidationError(_("Email domain is not allowed."))


validate_antispam_email = AntiSpamEmailValidator()


class AntiSpamEmailField(forms.EmailField):
    """An email field that email addresses with a known toxic domain."""

    default_validators = [validate_antispam_email]