from django import forms
from .models import Subscriber


class SubscribeForm(forms.ModelForm):
    """Newsletter subscription form with honeypot anti-spam."""

    # Honeypot field - should remain empty
    website = forms.CharField(
        required=False,
        widget=forms.TextInput(attrs={
            'class': 'hidden',
            'tabindex': '-1',
            'autocomplete': 'off',
        })
    )

    class Meta:
        model = Subscriber
        fields = ['email', 'first_name']
        widgets = {
            'email': forms.EmailInput(attrs={
                'placeholder': 'ton@email.com',
                'class': 'px-4 py-3 rounded text-ink w-full sm:w-auto sm:min-w-[300px]',
                'required': True,
            }),
            'first_name': forms.TextInput(attrs={
                'placeholder': 'Ton prénom (optionnel)',
                'class': 'px-4 py-3 rounded text-ink w-full sm:w-auto',
            }),
        }

    def clean_website(self):
        """Honeypot validation - reject if filled."""
        website = self.cleaned_data.get('website')
        if website:
            raise forms.ValidationError("Bot detected")
        return website

    def clean_email(self):
        """Validate email and check for existing subscription."""
        email = self.cleaned_data.get('email').lower().strip()

        # Check if already subscribed
        existing = Subscriber.objects.filter(email=email).first()
        if existing:
            if existing.status == 'confirmed':
                raise forms.ValidationError("Cette adresse email est déjà inscrite.")
            elif existing.status == 'pending':
                raise forms.ValidationError("Un email de confirmation t'a déjà été envoyé.")
            elif existing.status == 'unsubscribed':
                # Allow re-subscription
                pass

        return email
