from django import forms
from django.forms import BaseInlineFormSet
from django.utils.translation import gettext_lazy as _


class GenericBaseInlineFormSet(BaseInlineFormSet):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.verbose_name = self.model._meta.verbose_name
        self.verbose_name_plural = self.model._meta.verbose_name_plural

    def add_fields(self, form, index):
        """A hook for adding extra fields on to each form instance."""
        super().add_fields(form, index)
        try:
            helper = form.helper
        except AttributeError:
            helper = None

        if helper and 'id' not in helper.layout.fields:
            helper.layout.fields.append('id')

        # make them hidden
        if self.can_order:
            # Only pre-fill the ordering field for initial forms.
            if index is not None and index < self.initial_form_count():
                form.fields[forms.formsets.ORDERING_FIELD_NAME] = \
                    forms.IntegerField(label=_('Order'), initial=index + 1, required=False, widget=forms.HiddenInput)
            else:
                form.fields[forms.formsets.ORDERING_FIELD_NAME] = \
                    forms.IntegerField(label=_('Order'), required=False, widget=forms.HiddenInput)
            if helper and forms.formsets.ORDERING_FIELD_NAME not in helper.layout.fields:
                helper.layout.fields.append(forms.formsets.ORDERING_FIELD_NAME)

        if self.can_delete:
            form.fields[forms.formsets.DELETION_FIELD_NAME] = \
                forms.BooleanField(label=_('Delete'), required=False, widget=forms.HiddenInput)
            if helper and forms.formsets.DELETION_FIELD_NAME not in helper.layout.fields:
                helper.layout.fields.append(forms.formsets.DELETION_FIELD_NAME)
