from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import ngettext, gettext_lazy as _

from .helpers import is_valid_domain


class LetsEncryptForm(forms.Form):
    domains = forms.CharField(widget=forms.Textarea)
    
    def __init__(self, domains, wildcards, *args, **kwargs):
        self.domains = domains
        self.wildcards = wildcards
        super().__init__(*args, **kwargs)
        if wildcards:
            help_text = _("You can add domains maching the following wildcards: %s")
            self.fields['domains'].help_text += help_text % ', '.join(wildcards)
    
    def clean_domains(self):
        domains = self.cleaned_data['domains'].split()
        cleaned_domains = set()
        for domain in domains:
            domain = domain.strip()
            if domain not in self.domains:
                domain = domain.strip()
                if not is_valid_domain(domain, self.domains, self.wildcards):
                    raise ValidationError(_(
                        "%s domain is not included on selected websites, "
                        "nor matches with any wildcard domain.") % domain
                    )
            cleaned_domains.add(domain)
        return cleaned_domains