from django import forms
from django.core.validators import RegexValidator
from .models import ContactMessage
import re


class ContactForm(forms.ModelForm):
    """Secure contact form with honeypot and rate limiting support"""

    # Honeypot field - hidden from users, bots will fill it
    website = forms.CharField(
        required=False,
        widget=forms.HiddenInput(attrs={'class': 'd-none'}),
        validators=[RegexValidator(regex=r'^$', message='Invalid')],
    )

    class Meta:
        model = ContactMessage
        fields = ['name', 'phone', 'email', 'subject', 'message']
        widgets = {
            'name': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'نام و نام خانوادگی',
                'minlength': '2',
                'maxlength': '100',
            }),
            'phone': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': '۰۹۱۲۳۴۵۶۷۸۹',
                'pattern': r'^(0|\+98)?9\d{9}$',
                'title': 'شماره موبایل معتبر وارد کنید',
            }),
            'email': forms.EmailInput(attrs={
                'class': 'form-control',
                'placeholder': 'email@example.com',
            }),
            'subject': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'موضوع پیام',
                'maxlength': '200',
            }),
            'message': forms.Textarea(attrs={
                'class': 'form-control',
                'placeholder': 'متن پیام شما...',
                'rows': 5,
                'minlength': '10',
            }),
        }

    def clean_phone(self):
        phone = self.cleaned_data.get('phone', '')
        # Normalize phone number
        phone = phone.strip().replace(' ', '').replace('-', '')
        if phone.startswith('+98'):
            phone = '0' + phone[3:]
        elif phone.startswith('98'):
            phone = '0' + phone[2:]

        if not re.match(r'^09\d{9}$', phone):
            raise forms.ValidationError('لطفاً یک شماره موبایل معتبر وارد کنید.')
        return phone

    def clean_website(self):
        """Honeypot check"""
        website = self.cleaned_data.get('website')
        if website:
            raise forms.ValidationError('Spam detected!')
        return website

    def clean_message(self):
        message = self.cleaned_data.get('message', '')
        # Basic XSS prevention - Django templates auto-escape, but extra check
        if '<script' in message.lower() or 'javascript:' in message.lower():
            raise forms.ValidationError('محتوای نامعتبر شناسایی شد.')
        return message
