# -*- coding: utf-8 -*-

from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from django import forms
from django.forms.models import BaseInlineFormSet
from bda.models import Spectacle


class BaseBdaFormSet(BaseInlineFormSet):
    def clean(self):
        """Checks that no two articles have the same title."""
        super(BaseBdaFormSet, self).clean()
        if any(self.errors):
            # Don't bother validating the formset unless each form is valid on
            # its own
            return
        spectacles = []
        for i in range(0, self.total_form_count()):
            form = self.forms[i]
            if not form.cleaned_data:
                continue
            spectacle = form.cleaned_data['spectacle']
            delete = form.cleaned_data['DELETE']
            if not delete and spectacle in spectacles:
                raise forms.ValidationError(
                    "Vous ne pouvez pas vous inscrire deux fois pour le "
                    "même spectacle.")
            spectacles.append(spectacle)


class TokenForm(forms.Form):
    token = forms.CharField(widget=forms.widgets.Textarea())


class SpectacleModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return "%s le %s (%s) à %.02f€" % (obj.title, obj.date_no_seconds(),
                                           obj.location, obj.price)


class ResellForm(forms.Form):
    count = forms.ChoiceField(choices=(("1", "1"), ("2", "2"),))
    spectacle = SpectacleModelChoiceField(queryset=Spectacle.objects.none())

    def __init__(self, participant, *args, **kwargs):
        super(ResellForm, self).__init__(*args, **kwargs)
        self.fields['spectacle'].queryset = participant.attributions.all() \
            .distinct()
