from django import forms
from django.contrib.auth import get_user_model

from src.core import models as core_models
from .models import Membership, Team


class TeamForm(forms.ModelForm):
    name = core_models.text_input()
    description = core_models.text_input(required=False)

    class Meta:
        model = Team
        fields = ['name', 'description']


class TeamInviteUserForm(forms.Form):
    invitee = core_models.email_input(label="Person to invite")
    role = core_models.select_input(choices=Membership.Role.choices)

    def clean_invitee(self):
        User = get_user_model()
        email = self.cleaned_data["invitee"]
        try:
            invitee = User.objects.get(email=email)
            if self.team.is_on_team(invitee):
                raise forms.ValidationError("User already on team.")
        except User.DoesNotExist:
            invitee = email
            if self.team.memberships.filter(invite__signup_code__email=invitee).exists():
                raise forms.ValidationError("Invite already sent.")
        return invitee

    def __init__(self, *args, **kwargs):
        self.team: Team = kwargs.pop("team")
        super().__init__(*args, **kwargs)
