from django import forms
from django.forms import ModelForm
from .models import *
from datetime import datetime

"""
Possible redundancy, but if need arises, contents of forms can be easily customized
"""

CURRENT_YEAR = datetime.now().year
YEAR_CHOICES=tuple(range(CURRENT_YEAR,CURRENT_YEAR - 120, -1))


class SubjectAddForm(ModelForm):
    date_born = forms.DateField(label='Date of birth',
        widget=forms.SelectDateWidget(years=YEAR_CHOICES)
    )

    class Meta:
        model = Subject
        fields = '__all__'

    def clean(self):
        subject = self.cleaned_data

        subjects_from_db = Subject.objects.filter(screening_number=subject['screening_number'])

        if len(subjects_from_db):
            self.add_error('screening_number', "Screening number already in use")


class SubjectDetailForm(ModelForm):
    class Meta:
        model = Subject
        fields = '__all__'


class SubjectEditForm(ModelForm):
    date_born = forms.DateField(label='Date of birth',
        widget=forms.SelectDateWidget(years=YEAR_CHOICES)
    )

    class Meta:
        model = Subject
        fields = '__all__'


class WorkerAddForm(ModelForm):
    class Meta:
        model = Worker
        exclude = ['appointments']


class WorkerDetailForm(ModelForm):
    class Meta:
        model = Worker
        fields = '__all__'


class WorkerEditForm(ModelForm):
    class Meta:
        model = Worker
        fields = '__all__'


class AppointmentDetailForm(ModelForm):
    class Meta:
        model = Appointment
        fields = '__all__'


class AppointmentEditForm(ModelForm):
    class Meta:
        model = Appointment
        fields = '__all__'

    datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM:SS)')

class AppointmentAddForm(ModelForm):
    class Meta:
        model = Appointment
        exclude = ['is_finished']

    datetime_when = forms.DateTimeField(label='Appointment on (YYYY-MM-DD HH:MM:SS)')

class VisitDetailForm(ModelForm):
    datetime_begin = forms.DateField(label="Visit begins on",
        widget=forms.SelectDateWidget(years=YEAR_CHOICES)
    )
    datetime_end = forms.DateField(label="Visit ends on",
        widget=forms.SelectDateWidget(years=YEAR_CHOICES)
    )

    class Meta:
        model = Visit
        exclude = ['is_finished']

class VisitAddForm(ModelForm):
    datetime_begin = forms.DateField(label="Visit begins on",
        widget=forms.SelectDateWidget(years=YEAR_CHOICES)
    )
    datetime_end = forms.DateField(label="Visit ends on",
        widget=forms.SelectDateWidget(years=YEAR_CHOICES)
    )
    class Meta:
        model = Visit
        exclude = ['is_finished']