from django import forms


class StyledFormMixin:
    """Applique les classes du design system (voir static/src/app.css) à chaque widget."""

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        for field in self.fields.values():
            w = field.widget
            if isinstance(w, (forms.CheckboxInput,)):
                css = "form-checkbox"
            elif isinstance(w, (forms.RadioSelect, forms.CheckboxSelectMultiple)):
                css = ""
            elif isinstance(w, (forms.Select, forms.SelectMultiple)):
                css = "form-select"
            elif isinstance(w, forms.Textarea):
                css = "form-textarea"
            elif isinstance(w, forms.ClearableFileInput | forms.FileInput):
                css = "form-file"
            else:
                css = "form-input"
            if css:
                w.attrs["class"] = f"{css} {w.attrs.get('class', '')}".strip()


class MultipleFileInput(forms.ClearableFileInput):
    allow_multiple_selected = True


class MultipleFileField(forms.FileField):
    def __init__(self, *args, **kwargs):
        kwargs.setdefault("widget", MultipleFileInput())
        kwargs.setdefault("required", False)
        super().__init__(*args, **kwargs)

    def clean(self, data, initial=None):
        single = super().clean
        if isinstance(data, (list, tuple)):
            return [single(d, initial) for d in data if d]
        return [single(data, initial)] if data else []


class DateTimeLocalInput(forms.DateTimeInput):
    input_type = "datetime-local"

    def __init__(self, attrs=None):
        super().__init__(attrs, format="%Y-%m-%dT%H:%M")


class DateInput(forms.DateInput):
    input_type = "date"

    def __init__(self, attrs=None):
        super().__init__(attrs, format="%Y-%m-%d")
