# apps/estoque/forms.py

from django import forms
from apps.estoque.models import CategoriaInsumo, ItemEstoque, MovimentacaoEstoque

class CategoriaInsumoForm(forms.ModelForm):
    class Meta:
        model = CategoriaInsumo
        fields = ['nome', 'descricao']
        widgets = {
            'nome': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Nome da Categoria'}),
            'descricao': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Descrição'}),
        }

class ItemEstoqueForm(forms.ModelForm):
    class Meta:
        model = ItemEstoque
        fields = [
            'nome', 'categoria', 'quantidade', 'unidade_medida', 'localizacao',
            'data_validade', 'fornecedor', 'custo_unitario', 'notas'
        ]
        widgets = {
            'nome': forms.TextInput(attrs={'class': 'form-control', 'id': 'id_nome'}),
            'categoria': forms.Select(attrs={'class': 'form-select', 'id': 'id_categoria'}),
            'quantidade': forms.NumberInput(attrs={'class': 'form-control', 'id': 'id_quantidade'}),
            'unidade_medida': forms.Select(attrs={'class': 'form-select', 'id': 'id_unidade_medida'}),
            'localizacao': forms.TextInput(attrs={'class': 'form-control', 'id': 'id_localizacao'}),
            'data_validade': forms.DateInput(attrs={'class': 'form-control', 'type': 'date', 'id': 'id_data_validade'}),
            'fornecedor': forms.Select(attrs={'class': 'form-select', 'id': 'id_fornecedor'}),
            'custo_unitario': forms.NumberInput(attrs={'class': 'form-control', 'id': 'id_custo_unitario'}),
            'notas': forms.Textarea(attrs={'class': 'form-control', 'id': 'id_notas', 'rows': 3}),
        }

class MovimentacaoEstoqueForm(forms.ModelForm):
    class Meta:
        model = MovimentacaoEstoque
        fields = ['item', 'quantidade', 'tipo', 'observacoes']
        widgets = {
            'item': forms.Select(attrs={'class': 'form-select'}),
            'quantidade': forms.NumberInput(attrs={'class': 'form-control'}),
            'tipo': forms.Select(attrs={'class': 'form-select'}),
            'observacoes': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
        }

    def clean(self):
        cleaned_data = super().clean()
        item = cleaned_data.get('item')
        quantidade = cleaned_data.get('quantidade')
        tipo = cleaned_data.get('tipo')

        if tipo == 'saida' and item and quantidade:
            if item.quantidade < quantidade:
                raise forms.ValidationError("Quantidade insuficiente em estoque para saída.")