from django import forms
from .models import *
from django.forms.widgets import ClearableFileInput

class MultipleFileInput(ClearableFileInput):
    allow_multiple_selected = True

class MultipleFileField(forms.FileField):
    def __init__(self, *args, **kwargs):
        kwargs.setdefault("widget", MultipleFileInput())
        super().__init__(*args, **kwargs)

    def clean(self, data, initial=None):
        single_file_clean = super().clean
        if isinstance(data, (list, tuple)):
            result = [single_file_clean(d, initial) for d in data]
        else:
            result = single_file_clean(data, initial)
        return result
    
class galleryForm(forms.ModelForm):
    title = forms.CharField(
        required=True,
        error_messages={"invalid": ("Enter your name")},
        widget=forms.TextInput(
            attrs={
                "class": "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg shadow focus:ring-[#d83f89] focus:border-[#d83f89] block w-full p-2.5",
            }
        ),
    )


    main_image = forms.ImageField(
        required=True,
        error_messages={"invalid": ("Image files only")},
        widget=forms.FileInput(
            attrs={
                "class": "bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg shadow focus:ring-[#d83f89] focus:border-[#d83f89] block w-full",
            }
        ),
    )

    active = forms.CharField(
        error_messages={"invalid": ("Enter your active")},
        widget=forms.CheckboxInput(
            attrs={
                "class": "w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded md focus:ring-[#d83f89] focus:ring-2",
            }
        ),
    )

    def clean_name(self):
        name = self.cleaned_data.get("name")
        if len(name) < 3:
            raise forms.ValidationError("Name must be at least 3 characters long.")
        return name

    class Meta:
        model = Gallery
        fields = "__all__"


class galleryImagesForm(forms.ModelForm):
    other_shop_images = MultipleFileField(required=False)

    class Meta:
        model = OthergalleryImages
        fields = ["other_shop_images"]

    def __init__(self, *args, **kwargs):
        super(galleryImagesForm, self).__init__(*args, **kwargs)
        for field in self.fields:
            self.fields["other_shop_images"].widget.attrs[
                "class"
            ] = "shadow-sm rounded-lg bg-gray-50 border border-gray-300 text-gray-900 sm:text-sm focus:ring-yellow-600 focus:border-yellow-600 block w-full"

