# apps/fornecedores_insumos/forms.py

from django import forms
from apps.fornecedores_insumos.models import FornecedoresInsumosModels

class FornecedoresInsumosForm(forms.ModelForm):
    class Meta:
        model = FornecedoresInsumosModels
        exclude = []
    
    # Campos do formulário com widgets personalizados
    nome_fantasia = forms.CharField(
        label='Nome Fantasia:',
        required=True,
        max_length=255,
        widget=forms.TextInput(attrs={"class": "form-control"})
    )

    razao_social = forms.CharField(
        label='Razão Social:',
        required=False,
        max_length=255,
        widget=forms.TextInput(attrs={"class": "form-control"})
    )

    cnpj = forms.CharField(
        label='CNPJ:',
        required=False,
        max_length=18,
        widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "00.000.000/0000-00"})
    )

    inscricao_estadual = forms.CharField(
        label='Inscrição Estadual:',
        required=False,
        max_length=20,
        widget=forms.TextInput(attrs={"class": "form-control"})
    )

    endereco = forms.CharField(
        label='Endereço:',
        required=False,
        max_length=255,
        widget=forms.TextInput(attrs={"class": "form-control"})
    )

    complemento = forms.CharField(
        label='Complemento:',
        required=False,
        max_length=255,
        widget=forms.TextInput(attrs={"class": "form-control"})
    )

    bairro = forms.CharField(
        label='Bairro:',
        required=False,
        max_length=100,
        widget=forms.TextInput(attrs={"class": "form-control"})
    )

    cidade = forms.CharField(
        label='Cidade:',
        required=False,
        max_length=100,
        widget=forms.TextInput(attrs={"class": "form-control"})
    )

    uf = forms.ChoiceField(
        label='UF:',
        required=False,
        choices=FornecedoresInsumosModels.UF_CHOICES,
        widget=forms.Select(attrs={"class": "form-select"})
    )

    cep = forms.CharField(
        label='CEP:',
        required=False,
        max_length=9,
        widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "00000-000"})
    )

    telefone_celular = forms.CharField(
        label='Tel. Celular:',
        required=False,
        max_length=20,
        widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "(00) 00000-0000"})
    )

    telefone_residencial = forms.CharField(
        label='Tel. Residencial:',
        required=False,
        max_length=20,
        widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "(00) 0000-0000"})
    )

    email = forms.EmailField(
        label='Email:',
        required=False,
        max_length=100,
        widget=forms.EmailInput(attrs={"class": "form-control", "placeholder": "exemplo@dominio.com"})
    )

    nome_responsavel = forms.CharField(
        label='Nome do Responsável:',
        required=False,
        max_length=255,
        widget=forms.TextInput(attrs={"class": "form-control"})
    )

    contato_responsavel = forms.CharField(
        label='Contato do Responsável:',
        required=False,
        max_length=20,
        widget=forms.TextInput(attrs={"class": "form-control", "placeholder": "(00) 00000-0000"})
    )

    observacoes = forms.CharField(
        label='Observações:',
        required=False,
        widget=forms.Textarea(attrs={"class": "form-control", "rows": 3})
    )

    def clean_nome_fantasia(self):
        nome_fantasia = self.cleaned_data.get('nome_fantasia')
        qs = FornecedoresInsumosModels.objects.filter(nome_fantasia=nome_fantasia)
        if self.instance.pk:
            qs = qs.exclude(pk=self.instance.pk)
        if qs.exists():
            raise forms.ValidationError('Fornecedor já cadastrado com este Nome Fantasia.')
        return nome_fantasia