from django import forms
from django.contrib.auth.forms import AuthenticationForm
from .models import MessageContact, Reservation, VisitorUser
from django_recaptcha.fields import ReCaptchaField
from django_recaptcha.widgets import ReCaptchaV2Checkbox
from .models import Event

class EventForm(forms.ModelForm):
    class Meta:
        model = Event
        fields = ['title', 'description', 'date', 'time', 'localisation', 'latitude', 'longitude', 'price', 'image', 'category']

class ContactForm(forms.ModelForm):
    captcha = ReCaptchaField(widget=ReCaptchaV2Checkbox())

    class Meta:
        model = MessageContact
        fields = ['name', 'email', 'phone', 'message', 'captcha']


class ReservationForm(forms.ModelForm):
    captcha = ReCaptchaField(widget=ReCaptchaV2Checkbox())

    class Meta:
        model = Reservation
        fields = ['first_name', 'last_name', 'email', 'phone_number', 'birth_date', 'passenger_count', 'medical_info', 'captcha']


class VisitorSignupForm(forms.ModelForm):
    password1 = forms.CharField(label="Mot de passe", widget=forms.PasswordInput)
    password2 = forms.CharField(label="Confirmez le mot de passe", widget=forms.PasswordInput)
    
    class Meta:
        model = VisitorUser
        fields = ['username', 'email']

    def clean_password2(self):
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError("Les mots de passe ne correspondent pas.")
        return password2

    def save(self, commit=True):
        user = super().save(commit=False)
        user.set_password(self.cleaned_data["password1"])
        if commit:
            user.save()
        return user


class VisitorLoginForm(AuthenticationForm):
    username = forms.EmailField(label="Adresse e-mail")
    password = forms.CharField(label="Mot de passe", widget=forms.PasswordInput)

class VisitorUserProfileForm(forms.ModelForm):
    class Meta:
        model = VisitorUser
        fields = ['username', 'email', 'first_name', 'join_date', 'last_name', 'phone_number', 'address', 'city', 'bio', 'profile_picture']