# accounts/forms.py
from django import forms
from .models import CustomUser


class UserRegistrationForm(forms.ModelForm):
    referral_code_input = forms.CharField(
        required=False, label="Referral Code",
        widget=forms.TextInput(attrs={'placeholder': 'Referral Code'})
    )
    agreed_terms = forms.BooleanField(
        required=True, label="I agree to the terms and conditions"
    )

    class Meta:
        model = CustomUser
        fields = [
            'first_name', 'last_name', 'mobile_number', 'email',
            'user_type', 'state','district', 'city', 'pincode'
        ]
        widgets = {
            'first_name': forms.TextInput(attrs={'placeholder': 'First Name'}),
            'last_name': forms.TextInput(attrs={'placeholder': 'Last Name'}),
            'mobile_number': forms.TextInput(attrs={'placeholder': 'Mobile Number'}),
            'email': forms.EmailInput(attrs={'placeholder': 'Email'}),
            'user_type': forms.Select(attrs={'class': 'form-select'}),
            'district': forms.TextInput(attrs={'placeholder': 'District'}),
            'state': forms.TextInput(attrs={'placeholder': 'State'}),
            'city': forms.TextInput(attrs={'placeholder': 'City'}),
            'pincode': forms.TextInput(attrs={'placeholder': 'Pincode'}),
        }

    def clean_referral_code_input(self):
        code = self.cleaned_data.get('referral_code_input')
        if code:
            try:
                return CustomUser.objects.get(referral_code=code)
            except CustomUser.DoesNotExist:
                raise forms.ValidationError("Invalid referral code.")
        return None

    def save(self, commit=True):
        user = super().save(commit=False)
        referred_by = self.cleaned_data.get('referral_code_input')
        if referred_by:
            user.referred_by = referred_by
        if commit:
            user.save()
        return user



class LoginForm(forms.Form):
    mobile_number = forms.CharField(
        max_length=10,
        widget=forms.TextInput(attrs={'placeholder': 'Mobile Number'})
    )
    login_pin = forms.CharField(
        max_length=6,
        widget=forms.PasswordInput(attrs={'placeholder': 'Login PIN'})
    )
    remember_me = forms.BooleanField(required=False)

    def clean_login_pin(self):
        pin = self.cleaned_data.get('login_pin')
        if not pin.isdigit() or len(pin) not in [4, 6]:
            raise forms.ValidationError("PIN must be 4 or 6 digits long and numeric.")
        return pin
    def clean_mobile_number(self):
        mobile = self.cleaned_data.get('mobile_number')
        if not mobile.isdigit() or len(mobile) != 10:
            raise forms.ValidationError("Enter a valid 10-digit mobile number.")
        return mobile

class SetPinsForm(forms.Form):
    login_pin = forms.CharField(
        label="Create 4-digit Login PIN",
        max_length=4,
        min_length=4,
        widget=forms.PasswordInput
    )
    transaction_pin = forms.CharField(
        label="Create 4-digit Transaction PIN",
        max_length=4,
        min_length=4,
        widget=forms.PasswordInput
    )

from django import forms
from .models import CustomUser

class RoleUpdateForm(forms.ModelForm):
    class Meta:
        model = CustomUser
        fields = ['role']

from django import forms
from django.contrib.auth.forms import AuthenticationForm

class CustomLoginForm(AuthenticationForm):
    remember_me = forms.BooleanField(required=False, widget=forms.CheckboxInput(), label="Remember Me")
