from django import forms

from apps.promotions.models import PromoCode


class PromoCodeForm(forms.ModelForm):
    class Meta:
        model = PromoCode
        fields = [
            'code', 'title', 'institute_name', 'description',
            'discount_type', 'discount_value', 'applies_to',
            'max_uses', 'max_uses_per_user', 'min_amount',
            'valid_from', 'valid_until', 'is_active',
        ]
        widgets = {
            'code': forms.TextInput(attrs={
                'class': 'form-control text-uppercase',
                'placeholder': 'e.g. NUST2026',
            }),
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'institute_name': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'University / college / institute name',
            }),
            'description': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
            'discount_type': forms.Select(attrs={'class': 'form-select'}),
            'discount_value': forms.NumberInput(attrs={
                'class': 'form-control', 'step': '0.01', 'min': '0',
            }),
            'applies_to': forms.Select(attrs={'class': 'form-select'}),
            'max_uses': forms.NumberInput(attrs={'class': 'form-control', 'min': '0'}),
            'max_uses_per_user': forms.NumberInput(attrs={'class': 'form-control', 'min': '0'}),
            'min_amount': forms.NumberInput(attrs={'class': 'form-control', 'step': '0.01', 'min': '0'}),
            'valid_from': forms.DateTimeInput(attrs={'class': 'form-control', 'type': 'datetime-local'}),
            'valid_until': forms.DateTimeInput(attrs={'class': 'form-control', 'type': 'datetime-local'}),
            'is_active': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
        }
        help_texts = {
            'code': 'Students type this at checkout. Letters/numbers only.',
            'institute_name': 'Which college or university this special discount is for.',
            'discount_value': 'For percent: 20 means 20% off. For fixed: amount off the fee.',
            'max_uses': '0 = unlimited total uses.',
            'max_uses_per_user': '0 = unlimited per student. Typical: 1.',
            'min_amount': 'Promo only applies if fee is at least this amount.',
        }


class ApplyPromoForm(forms.Form):
    code = forms.CharField(
        max_length=40,
        label='Promo code',
        widget=forms.TextInput(attrs={
            'class': 'form-control text-uppercase',
            'placeholder': 'Enter college / university promo code',
            'autocomplete': 'off',
        }),
    )
