from django import forms
from django.conf import settings

from .models import CustomUser, ShippingAddress
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth import get_user_model
from allauth.account.forms import SignupForm

User = get_user_model()
class CustomUserCreationForm(SignupForm):
    first_name = forms.CharField(max_length=30, required=True)
    last_name = forms.CharField(max_length=30, required=True)

    class Meta:
        model = User
        fields = ['username', 'email', 'first_name', 'last_name', 'password1', 'password2']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        placeholders = {
            'username': 'Enter username',
            'email': 'Enter email address',
            'first_name': 'Enter first name',
            'last_name': 'Enter last name',
            'password1': 'Enter password',
            'password2': 'Confirm password',
        }

        for name, field in self.fields.items():
            field.widget.attrs.update({
                'class': 'form-control border-start-0 py-3',
                'placeholder': placeholders.get(name, ''),
            })

    def save(self, request):
        user = super().save(request)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()
        return user


class CustomerProfileForm(forms.ModelForm):
    preferred_language = forms.ChoiceField(
        choices=settings.LANGUAGES,
        required=False,
        widget=forms.Select(attrs={'class': 'form-control'})
    )

    class Meta:
        model = User
        fields = ['phone', 'address', 'city', 'state', 'postal_code', 'date_of_birth', 'profile_picture', 'preferred_language']
        widgets = {
            'phone': forms.TextInput(attrs={'class': 'form-control'}),
            'city': forms.TextInput(attrs={'class': 'form-control'}),
            'state': forms.TextInput(attrs={'class': 'form-control'}),
            'address': forms.Textarea(attrs={'rows': 3, 'class': 'form-control'}),
            'date_of_birth': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
            'profile_picture': forms.FileInput(attrs={'class': 'form-control-file'}),
        }
        labels = {
            'phone': 'Phone Number (Nigeria)',
            'address': 'Full Delivery Address',
            'preferred_language': 'Preferred Language',
        }
        
        help_texts = {
            'phone': 'Enter a valid Nigerian phone number (e.g., +2348012345678)',
            'address': 'Include street, neighborhood, and any landmarks for accurate delivery',
        }
        
        
class ShippingAddressForm(forms.ModelForm):
    class Meta:
        model = ShippingAddress
        fields = ['address_name', 'full_address', 'city', 'state', 'phone', 'is_default']
        widgets = {
            'phone': forms.TextInput(attrs={'class': 'form-control'}),
            'city': forms.TextInput(attrs={'class': 'form-control'}),
            'state': forms.TextInput(attrs={'class': 'form-control'}),
            'full_address': forms.Textarea(attrs={
                'rows': 3, 
                'class': 'form-control',
                'placeholder': 'House number, street name, landmark, etc.'
            }),
            'address_name': forms.Select(attrs={'class': 'form-control form-select'}),
            'date_of_birth': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
            'profile_picturere': forms.FileInput(attrs={'class': 'form-control-file'}),
        }
        labels = {
            'phone': 'Phone Number (Nigeria)',
            'address_name': 'Full Delivery Address',
        }
        
        help_texts = {
            'phone': 'Enter a valid Nigerian phone number (e.g., +2348012345678)',
            'address_name': 'Include street, neighborhood, and any landmarks for accurate delivery',
        }

        labels = {
            'is_default': 'Make this my default shipping address',
        }
        
        
        
        