import re

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

from antispam.models import ToxicDomain


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

    def run_validators(self, value: str):
        super().run_validators(value)
        # Domain part should exist since email validation is guaranteed to run first
        domain = re.search(EmailValidator.domain_regex, value)
        if ToxicDomain.objects.filter(domain=domain[0]).exists():
            raise forms.ValidationError(_("Email domain is not allowed."))