from django.utils.translation import ugettext_lazy as _
from registration.forms import RegistrationForm
from django.contrib.auth.models import User
from django import forms


class SniptRegistrationForm(RegistrationForm):
    """
    Subclass of ``RegistrationForm`` which enforces uniqueness of
    email addresses.
    
    """
    def clean_username(self):
        """
        Validate that the username is alphanumeric and is not already
        in use.
        
        """
        existing = User.objects.filter(username__iexact=self.cleaned_data['username'])
        if existing.exists():
            raise forms.ValidationError(_("A user with that username already exists."))

        elif '@' in self.cleaned_data['username']:
            raise forms.ValidationError(_("Cannot have '@' in username."))
        elif '.' in self.cleaned_data['username']:
            raise forms.ValidationError(_("Cannot have '.' in username."))
        elif '+' in self.cleaned_data['username']:
            raise forms.ValidationError(_("Cannot have '+' in username."))

        else:
            return self.cleaned_data['username']

    def clean_email(self):
        """
        Validate that the supplied email address is unique for the
        site.
        
        """
        if User.objects.filter(email__iexact=self.cleaned_data['email']):
            raise forms.ValidationError(_("This email address is already in use. Please supply a different email address."))
        return self.cleaned_data['email']
