"""passbook core invitation form"""

from django import forms
from django.core.exceptions import ValidationError
from django.utils.translation import gettext as _

from passbook.core.models import Invitation, User


class InvitationForm(forms.ModelForm):
    """InvitationForm"""

    def clean_fixed_username(self):
        """Check if username is already used"""
        username = self.cleaned_data.get("fixed_username")
        if User.objects.filter(username=username).exists():
            raise ValidationError(_("Username is already in use."))
        return username

    def clean_fixed_email(self):
        """Check if email is already used"""
        email = self.cleaned_data.get("fixed_email")
        if User.objects.filter(email=email).exists():
            raise ValidationError(_("E-Mail is already in use."))
        return email

    class Meta:

        model = Invitation
        fields = ["expires", "fixed_username", "fixed_email", "needs_confirmation"]
        labels = {
            "fixed_username": "Force user's username (optional)",
            "fixed_email": "Force user's email (optional)",
        }
        widgets = {
            "fixed_username": forms.TextInput(),
            "fixed_email": forms.TextInput(),
        }