# payments/forms.py
from django import forms

class ExternalWalletTopUpForm(forms.Form):
    mobile = forms.CharField(max_length=15, label="User Mobile Number")
    amount = forms.DecimalField(max_digits=10, decimal_places=2, label="Top-up Amount")
from django import forms
from .models import CommissionConfig, CommissionSplitConfig

# payments/forms.py
from django import forms
from payments.models import CommissionConfig

class CommissionConfigForm(forms.ModelForm):
    class Meta:
        model = CommissionConfig
        fields = [
            "operator",
            "provider_name",
            "commission_type",
            "commission_value",
        ]
        # fields = ['operator', 'provider_name', 'provider_percentage', 'fixed_percentage']

# commissions/forms.py
from django import forms
from django.conf import settings
from recharge.models import Operator
from .models import CommissionConfig

# commissions/forms.py
from django import forms
from django.conf import settings
from recharge.models import Operator
from .models import CommissionConfig

def provider_choices():
    m = getattr(settings, "PROVIDER_SOURCE_MAP", {}) or {}
    return [(k, v) for k, v in m.items()] or []

class CommissionConfigAdminForm(forms.ModelForm):
    provider_name = forms.ChoiceField(
        choices=provider_choices,
        required=True,
        label="Provider",
    )

    class Meta:
        model = CommissionConfig
        fields = "__all__"

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        provider = self.data.get("provider_name") or getattr(self.instance, "provider_name", "") or ""
        src_value = settings.PROVIDER_SOURCE_MAP.get(provider, provider) if provider else None

        if src_value:
            self.fields["operator"].queryset = Operator.objects.filter(source__iexact=src_value)
        else:
            self.fields["operator"].queryset = Operator.objects.none()
            self.fields["operator"].help_text = "Select a Provider first."

    class Media:
        js = ("admin/js/commission_depends.js",)



class CommissionSplitForm(forms.ModelForm):
    class Meta:
        model = CommissionSplitConfig
        fields = ['role', 'percentage']
        widgets = {
            'role': forms.Select(attrs={'class': 'form-control'}),
            'percentage': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01'}),
        }

from django import forms
from .models import CommissionSplitConfig
from django.core.exceptions import ValidationError
from django import forms
from .models import CommissionSplitConfig
from django.db.models import Sum

class CommissionSplitConfigForm(forms.ModelForm):
    class Meta:
        model = CommissionSplitConfig
        fields = ['role', 'percentage']

    def clean_role(self):
        role = self.cleaned_data['role']
        qs = CommissionSplitConfig.objects.filter(role=role)

        if self.instance.pk:  # Editing existing
            qs = qs.exclude(pk=self.instance.pk)

        if qs.exists():
            raise ValidationError("This role already has a split configured.")

        return role


    # def clean(self):
    #     cleaned_data = super().clean()
    #     new_percentage = cleaned_data.get('percentage') or 0
    #     total = CommissionSplitConfig.objects.aggregate(Sum('percentage'))['percentage__sum'] or 0

    #     if total + new_percentage > 100:
    #         raise ValidationError("Total commission split cannot exceed 100%.")
    def clean(self):
        cleaned_data = super().clean()
        new_percentage = cleaned_data.get('percentage') or 0

        # Get total excluding current instance if editing
        qs = CommissionSplitConfig.objects.all()
        if self.instance.pk:
            qs = qs.exclude(pk=self.instance.pk)

        total = qs.aggregate(Sum('percentage'))['percentage__sum'] or 0

        if total + new_percentage > 100:
            raise ValidationError("Total commission split cannot exceed 100%.")



from django import forms
from payments.models import GeoRoleAssignment

class GeoRoleAssignmentForm(forms.ModelForm):
    class Meta:
        model = GeoRoleAssignment
        fields = [
            'user', 'role', 'pincode', 'district', 'state', 'vertical',
            'valid_from', 'valid_to'
        ]
        widgets = {
            'user': forms.Select(attrs={'class': 'form-select'}),
            'role': forms.Select(attrs={'class': 'form-select'}),
            'pincode': forms.TextInput(attrs={'class': 'form-control'}),
            'district': forms.TextInput(attrs={'class': 'form-control'}),
            'state': forms.TextInput(attrs={'class': 'form-control'}),
            'vertical': forms.TextInput(attrs={'class': 'form-control'}),
            'valid_from': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
            'valid_to': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
        }

    def clean(self):
        cleaned_data = super().clean()
        self.instance.user = cleaned_data.get("user")
        self.instance.role = cleaned_data.get("role")
        self.instance.pincode = cleaned_data.get("pincode")
        self.instance.district = cleaned_data.get("district")
        self.instance.state = cleaned_data.get("state")
        self.instance.vertical = cleaned_data.get("vertical")
        self.instance.valid_from = cleaned_data.get("valid_from")
        self.instance.valid_to = cleaned_data.get("valid_to")
        self.instance.clean()
