from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from .models import UserExtension

# Form 1: Secure Registration
# Combines standard Django User creation with sketch fields
class UnifiedRegisterForm(UserCreationForm):
    # Required standard User fields as per sketch
    email = forms.EmailField(required=True)
    first_name = forms.CharField(required=True, label="* Name")
    
    # Required UserExtension fields from sketch
    user_type = forms.ChoiceField(choices=UserExtension.USER_TYPE_CHOICES, label="* TIPO")
    gender = forms.CharField(required=True, label="* SEXO")
    # DateField with HTML5 widget for better UI/Security
    date_of_birth = forms.DateField(required=True, label="* DATA DE NASC.", widget=forms.DateInput(attrs={'type': 'date'}))

    class Meta(UserCreationForm.Meta):
        # We must manually list the fields we want to extend beyond standard UserCreationForm
        fields = UserCreationForm.Meta.fields + ('email', 'first_name', 'user_type', 'gender', 'date_of_birth',)

    def save(self, commit=True):
        # 1. Save standard User object
        user = super().save(commit=False)
        user.email = self.cleaned_data['email']
        user.first_name = self.cleaned_data['first_name']
        if commit:
            user.save()
            # 2. Create and Save linked UserExtension with sketch data
            UserExtension.objects.create(
                user=user,
                user_type=self.cleaned_data['user_type'],
                gender=self.cleaned_data['gender'],
                date_of_birth=self.cleaned_data['date_of_birth']
            )
        return user

# Form 2: Simple Login Form (Standard Django)
class SketchLoginForm(AuthenticationForm):
    username = forms.EmailField(label="Email") # Overriding label for sketch consistency