from django import forms
from account.models import Person
from .models import *
from django.core.exceptions import ValidationError
from django.forms.widgets import NumberInput

class NotificationForm(forms.ModelForm):
    PAYMENT_CHOICES = [
        ('Bank Transfer', 'Bank Transfer'),
		('Cash Deposit (Bank)', 'Cash Deposit (Bank)'),
        ('POS Transaction', 'POS Transaction'),
        ('Cheque', 'Cheque'),
        ('Other Offline Method', 'Other Offline Method'),
    ]
    method = forms.ChoiceField(label='Payment Method', choices=PAYMENT_CHOICES)
    date = forms.DateField(label='Payment Date', widget=NumberInput(attrs={'type': 'date'}))
    class Meta:
        model = Notification
        fields = ['student', 'category', 'amount_paid', 'account', 'method', 'date', 'term']

    # def __init__(self, *args, **kwargs):
    #     self.request = kwargs.pop("request") # store value of request
    #     super().__init__(*args, **kwargs)
    #
    #     self.fields['student'] = forms.ModelChoiceField(queryset=Person.objects.filter(role="Student"), label="Student Paid for")
    #     self.fields['category'] = forms.ModelChoiceField(queryset=Category.objects.filter(classe=student.classe), label="Student Paid for")
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop("request", None)
        super().__init__(*args, **kwargs)

        self.fields['student'].queryset = Person.objects.filter(role="Student")
        self.fields['category'].queryset = Category.objects.none()

        if self.data.get('student'):
            try:
                student_id = int(self.data.get('student'))
                student = Person.objects.get(pk=student_id)
                self.fields['category'].queryset = Category.objects.filter(classe=student.classe)
            except (ValueError, Person.DoesNotExist):
                pass

class CategoryForm(forms.ModelForm):
    class Meta:
        model = Category
        fields = ['category', 'classe', 'amount']

class AccountForm(forms.ModelForm):
    class Meta:
        model = Account
        fields = ['number', 'bank', 'name']
