#!/usr/bin/env python

from dal import autocomplete, forward
from django import forms
from .models import Transaction, TransactionTemplate

class TransactionTemplateForm(forms.ModelForm):
    class Meta:
        model = TransactionTemplate
        fields ='__all__'

        # Le champ de destination est remplacé par un champ d'auto-complétion.
        # Quand des lettres sont tapées, une requête est envoyée sur l'API d'auto-complétion
        # et récupère les aliases valides
        # Pour force le type d'une note, il faut rajouter le paramètre :
        # forward=(forward.Const('TYPE', 'note_type') où TYPE est dans {user, club, special}
        widgets = {
            'destination': autocomplete.ModelSelect2(url='note:note_autocomplete',
                                                     attrs={
                                                         'data-placeholder': 'Note ...',
                                                         'data-minimum-input-length': 1,
                                                     }),
        }


class TransactionForm(forms.ModelForm):
    def save(self, commit=True):
        self.instance.transaction_type = 'transfert'

        super().save(commit)

    class Meta:
        model = Transaction
        fields = ('source', 'destination', 'reason', 'amount',)

        # Voir ci-dessus
        widgets = {
            'source': autocomplete.ModelSelect2(url='note:note_autocomplete',
                                                     attrs={
                                                         'data-placeholder': 'Note ...',
                                                         'data-minimum-input-length': 1,
                                                     },),
            'destination': autocomplete.ModelSelect2(url='note:note_autocomplete',
                                                     attrs={
                                                         'data-placeholder': 'Note ...',
                                                         'data-minimum-input-length': 1,
                                                     },),
        }

class ConsoForm(forms.ModelForm):

    def save(self, commit=True):
        button: TransactionTemplate = TransactionTemplate.objects.filter(name=self.data['button']).get()
        self.instance.destination = button.destination
        self.instance.amount = button.amount
        self.instance.transaction_type = 'bouton'
        self.instance.reason = button.name
        super().save(commit)

    class Meta:
        model = Transaction
        fields = ('source',)

        # Le champ d'utilisateur est remplacé par un champ d'auto-complétion.
        # Quand des lettres sont tapées, une requête est envoyée sur l'API d'auto-complétion
        # et récupère les aliases de note valides
        widgets = {
            'source': autocomplete.ModelSelect2(url='note:note_autocomplete',
                                                attrs={
                                                    'data-placeholder': 'Note ...',
                                                    'data-minimum-input-length': 1,
                                                }),
        }