from django import forms

from groceries.models import ShoppingList, ShoppingListItem, Item, ItemCategory


class CreateShoppingListForm(forms.ModelForm):
    class Meta:
        model = ShoppingList
        fields = ['name', 'notes']
        widgets = {
            'name': forms.TextInput(attrs={
                'class': 'input input-bordered w-full',
                'placeholder': 'Např. Týdenní nákup, Víkend, atd.'
            }),
            'notes': forms.Textarea(attrs={
                'class': 'textarea textarea-bordered w-full',
                'placeholder': 'Volitelné poznámky k nákupnímu seznamu...',
                'rows': 4
            }),
        }
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['name'].label = 'Název nákupního seznamu'
        self.fields['name'].required = True
        self.fields['notes'].label = 'Poznámky'
        self.fields['notes'].required = False


class AddItemToShoppingListForm(forms.ModelForm):
    class Meta:
        model = ShoppingListItem
        fields = ['item', 'quantity', 'unit', 'notes']
        widgets = {
            'item': forms.Select(attrs={'class': 'select select-bordered w-full'}),
            'quantity': forms.NumberInput(attrs={
                'class': 'input input-bordered w-full',
                'step': '0.001',
                'placeholder': 'Množství (volitelné)'
            }),
            'unit': forms.Select(attrs={'class': 'select select-bordered w-full'}),
            'notes': forms.TextInput(attrs={
                'class': 'input input-bordered w-full',
                'placeholder': 'Poznámka (volitelné)'
            }),
        }
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['item'].queryset = Item.objects.all().order_by('name')
        self.fields['item'].label = 'Položka'
        self.fields['item'].widget.attrs.update({'class': 'select select-bordered w-full'})
        self.fields['quantity'].label = 'Množství'
        self.fields['quantity'].required = False
        self.fields['unit'].label = 'Jednotka'
        self.fields['unit'].required = False
        self.fields['unit'].widget.attrs.update({'class': 'select select-bordered w-full'})
        self.fields['notes'].label = 'Poznámka'
        self.fields['notes'].required = False


class EditShoppingListItemForm(forms.ModelForm):
    class Meta:
        model = ShoppingListItem
        fields = ['item', 'quantity', 'unit', 'notes']
        widgets = {
            'item': forms.Select(attrs={'class': 'select select-bordered w-full'}),
            'quantity': forms.NumberInput(attrs={
                'class': 'input input-bordered w-full',
                'step': '0.001',
                'placeholder': 'Množství (volitelné)'
            }),
            'unit': forms.Select(attrs={'class': 'select select-bordered w-full'}),
            'notes': forms.TextInput(attrs={
                'class': 'input input-bordered w-full',
                'placeholder': 'Poznámka (volitelné)'
            }),
        }
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['item'].queryset = Item.objects.all().order_by('name')
        self.fields['item'].label = 'Položka'
        self.fields['item'].widget.attrs.update({'class': 'select select-bordered w-full'})
        self.fields['quantity'].label = 'Množství'
        self.fields['quantity'].required = False
        self.fields['unit'].label = 'Jednotka'
        self.fields['unit'].required = False
        self.fields['unit'].widget.attrs.update({'class': 'select select-bordered w-full'})
        self.fields['notes'].label = 'Poznámka'
        self.fields['notes'].required = False


class ItemCategoryForm(forms.ModelForm):
    class Meta:
        model = ItemCategory
        fields = ['name', 'position']
        widgets = {
            'name': forms.TextInput(attrs={
                'class': 'input input-bordered w-full',
                'placeholder': 'Např. Ovoce a zelenina, Mléčné výrobky, atd.'
            }),
            'position': forms.NumberInput(attrs={
                'class': 'input input-bordered w-full',
                'placeholder': 'Pořadí (0 = první)'
            }),
        }
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['name'].label = 'Název kategorie'
        self.fields['name'].required = True
        self.fields['position'].label = 'Pořadí'
        self.fields['position'].required = False
        self.fields['position'].initial = 0


class ItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = ['name', 'category', 'default_quantity', 'notes']
        widgets = {
            'name': forms.TextInput(attrs={
                'class': 'input input-bordered w-full',
                'placeholder': 'Např. Mléko 1,5%, Banány, atd.'
            }),
            'category': forms.Select(attrs={
                'class': 'select select-bordered w-full'
            }),
            'default_quantity': forms.NumberInput(attrs={
                'class': 'input input-bordered w-full',
                'step': '0.001',
                'placeholder': 'Výchozí množství (volitelné)'
            }),
            'notes': forms.TextInput(attrs={
                'class': 'input input-bordered w-full',
                'placeholder': 'Poznámka (volitelné)'
            }),
        }
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['name'].label = 'Název položky'
        self.fields['name'].required = True
        self.fields['category'].label = 'Kategorie'
        self.fields['category'].required = False
        self.fields['category'].queryset = ItemCategory.objects.all().order_by('position', 'name')
        self.fields['category'].widget.attrs.update({'class': 'select select-bordered w-full'})
        self.fields['default_quantity'].label = 'Výchozí množství'
        self.fields['default_quantity'].required = False
        self.fields['notes'].label = 'Poznámka'
        self.fields['notes'].required = False