from django import forms
from django.contrib.auth.models import Group, User
from django.urls import reverse_lazy
from django.utils.text import format_lazy
from django.utils.translation import gettext_lazy as _

from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Layout, Fieldset, ButtonHolder, Submit

from financial_settlement.models import FinStatement
from users.models import Note


class FinStatementForm(forms.ModelForm):

    start_date = forms.DateTimeField(input_formats=['%d-%m-%Y'],
                                     widget=forms.DateTimeInput(format='%d-%m-%Y', attrs={'class': 'form-control'}))
    end_date = forms.DateTimeField(input_formats=['%d-%m-%Y'],
                                   widget=forms.DateTimeInput(
                                       format='%d-%m-%Y', attrs={'class': 'form-control'}))

    user = forms.ModelChoiceField(queryset=User.objects.all(), label=_('Użytkownik'))

    is_active = forms.CheckboxInput()

    class Meta:
        model = FinStatement
        fields = [
            'statement_id',
            'title',
            'start_date',
            'end_date',
            'payment',
            'last_statement_payment',
            'price_per_unified_frame',
            'user',
            'is_active'
        ]

    def __init__(self, *args, instance, **kwargs):
        super().__init__(*args, instance=instance, **kwargs)
        self.helper = FormHelper()
        self.helper.layout = Layout(
            Fieldset('', 'statement_id', 'title', 'start_date', 'end_date',
                     'payment', 'price_per_unified_frame', 'last_statement_payment', 'user', 'is_active'),
            ButtonHolder(
                Submit('submit', _('Zapisz'), css_class='btn btn-sm btn-success'),
                HTML(format_lazy('<a class="btn btn-sm btn-light" href="{}">{}</a>',
                                 reverse_lazy('financial_settlement:statement_list'), _('Wróć'))),
            ),
        )
        for field in ['statement_id', 'title', 'start_date', 'end_date', 'payment', 'price_per_unified_frame', 'user']:
            self.fields[field].required = True

        if instance.pk:
            self.initial['user'] = instance.user
            self.initial['is_active'] = instance.is_active
        else:
            self.initial['is_active'] = False

    def save(self, commit=True):
        instance = super().save(commit=commit)
        return instance