from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
import datetime  # for checking renewal date range.

from django import forms


class RenewBookForm(forms.Form):
    """Form for a librarian to renew books."""
    renewal_date = forms.DateField(
            help_text="Enter a date between now and 4 weeks (default 3).")

    def clean_renewal_date(self):
        data = self.cleaned_data['renewal_date']

        # Check date is not in past.
        if data < datetime.date.today():
            raise ValidationError(_('Invalid date - renewal in past'))
        # Check date is in range librarian allowed to change (+4 weeks)
        if data > datetime.date.today() + datetime.timedelta(weeks=4):
            raise ValidationError(
                _('Invalid date - renewal more than 4 weeks ahead'))

        # Remember to always return the cleaned data.
        return data

class ReturnBookForm(forms.Form):
    """Form for a librarian to renew books."""
    return_date = forms.DateField(
            help_text="Enter a date between borrow date and today.")

    penalty = forms.IntegerField(
            help_text="Penalty (in IDR).", 
            initial=0)

    def clean_return_date(self):
        data = self.cleaned_data['return_date']

        # Check date is not in future.
        if data > datetime.date.today():
            raise ValidationError(_('Invalid date - return in future'))

        return data