from django import forms
from apps.fornecedores.models import FornecedoresModels, Categoria

class CategoriaForm(forms.ModelForm):
    class Meta:
        model = Categoria
        fields = ['nome', 'observacao']

class FornecedoresForm(forms.ModelForm):
    class Meta:
        model = FornecedoresModels
        exclude = []

    categoria = forms.ModelChoiceField(
        queryset=Categoria.objects.all(),
        required=True,
        widget=forms.Select(attrs={"class": "form-select", "id": "id_categoria"})
    )

    documento = forms.CharField(
        label='CNPJ ou CPF:',
        required=True,
        max_length=18,
        widget=forms.TextInput(attrs={
            "type": "text",
            "class": "form-control",
            "id": "id_documento",
            "placeholder": "00.000.000/0001-00 ou 000.000.000-00",
        })
    )

    def clean_documento(self):
        doc = self.cleaned_data.get('documento', '').replace('.', '').replace('-', '').replace('/', '')
        if len(doc) not in [11, 14]:
            raise forms.ValidationError("Documento inválido: CPF deve ter 11 dígitos ou CNPJ 14 dígitos.")
        return doc

    inscricao_estadual = forms.CharField(
        label='Inscrição Estadual:',
        required=False,
        max_length=100,
        widget=forms.TextInput(attrs={
            "type": "text",
            "class": "form-control",
            "id": "id_inscricao_estadual",
            "placeholder": "0123456789"
        })
    )

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

    nome_fantasia = forms.CharField(
        label='Nome Fantasia:',
        required=True,
        max_length=100,
        widget=forms.TextInput(attrs={
            "type": "text",
            "class": "form-control",
            "id": "id_nome_fantasia",
        })
    )

    telefone_celular = forms.CharField(
        label='Tel. Móvel:',
        required=False,
        max_length=100,
        widget=forms.TextInput(attrs={
            "type": "text",
            "class": "form-control",
            "id": "id_telefone_celular",
            "placeholder": "(00) 0000-0000"
        })
    )

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

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

    uf = forms.ChoiceField(
        label='UF:',
        required=False,
        choices=(('', 'Selecione um estado'),
                 ('BA', 'BA'), ('AC', 'AC'), ('AL', 'AL'), ('AP', 'AP'),
                 ('AM', 'AM'), ('CE', 'CE'), ('DF', 'DF'), ('ES', 'ES'),
                 ('GO', 'GO'), ('MA', 'MA'), ('MT', 'MT'), ('MS', 'MS'),
                 ('MG', 'MG'), ('PA', 'PA'), ('PB', 'PB'), ('PR', 'PR'),
                 ('PE', 'PE'), ('PI', 'PI'), ('RJ', 'RJ'), ('RN', 'RN'),
                 ('RS', 'RS'), ('RO', 'RO'), ('RR', 'RR'), ('SC', 'SC'),
                 ('SP', 'SP'), ('SE', 'SE'), ('TO', 'TO')),
        widget=forms.Select(attrs={"class": "form-select", "id": "id_uf"})
    )

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

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

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

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

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

    contato_responsavel = forms.CharField(
        label='Tel. Responsável:',
        required=False,
        max_length=100,
        widget=forms.TextInput(attrs={"class": "form-control", "id": "id_contato_responsavel"})
    )

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