from django import forms
from apps.especies.models import Especies
from django.core.exceptions import ValidationError

import locale
locale.setlocale(locale.LC_NUMERIC, 'pt_BR.UTF-8')


class EspeciesForms(forms.ModelForm):
    class Meta:
        model = Especies
        exclude = []

    FITOFISIONOMIAS_CHOICES = [
        ('Terra Firme', 'Terra Firme'),
        ('Mata de Várzea', 'Mata de Várzea'),
        ('Mata Ciliar', 'Mata Ciliar'),
        ('Campinarana', 'Campinarana'),
        ('Savana', 'Savana'),
        ('Restinga', 'Restinga'),
        ('Campos Naturais', 'Campos Naturais'),
        ('Mata Ciliar', 'Mata Ciliar'),
        ('Mata Brejo de Altitude', 'Mata Brejo de Altitude'),
        ('Cerradão', 'Cerradão'),
        ('Caatinga Arborea', 'Caatinga Arborea'),
        ('Caatinga Ciliar', 'Caatinga Ciliar'),
        ('Palmeiral', 'Palmeiral'),
        ('Cerrado', 'Cerrado'),
        ('Caatinga Arbustiva', 'Caatinga Arbustiva'),
        ('Caatinga Herbacea', 'Caatinga Herbacea'),
        ('Formações Rochosas', 'Formações Rochosas'),
        ('Mata Ciliar',  'Mata Ciliar'),
        ('Mata de Galeria', 'Mata de Galeria'),
        ('Mata Seca', 'Mata Seca'),
        ('Cerradão', 'Cerradão'),
        ('Cerrado Típico', 'Cerrado Típico'),
        ('Cerrado Rupestre', 'Cerrado Rupestre'),
        ('Parque de Cerrado', 'Parque de Cerrado'),
        ('Palmeiral', 'Palmeiral'),
        ('Vereda', 'Vereda'),
        ('Campo Rupestre', 'Campo Rupestre'),
        ('Campo Sujo', 'Campo Sujo'),
        ('Campo Limpo', 'Campo Limpo'),
        ('Floresta Estacional Sempre Verde', 'Floresta Estacional Sempre Verde'),
        ('Floresta Ombrófila Densa', 'Floresta Ombrófila Densa'),
        ('Floresta Ombrófila Mista', 'Floresta Ombrófila Mista'),
        ('Floresta Estacional Semidecidual', 'Floresta Estacional Semidecidual'),
        ('Floresta Estacional Decidual', 'Floresta Estacional Decidual'),
        ('Restinga Arbórea/Arbustiva', 'Restinga Arbórea/Arbustiva'),
        ('Manguezal', 'Manguezal'),
        ('Mata Ciliar', 'Mata Ciliar'),
        ('Floresta Estacional', 'Floresta Estacional'),
        ('Restinga', 'Restinga'),
        ('Vegetação Savanóide', 'Vegetação Savanóide'),
        ('Campo Seco', 'Campo Seco'),
        ('Campo Úmido', 'Campo Úmido'),
        ('Banhado, Cerradão', 'Banhado, Cerradão'),
        ('Mata Semidecídua', 'Mata Semidecídua'),
        ('Mata Seca (decídua)', 'Mata Seca (decídua)'),
        ('Mata Ripária', 'Mata Ripária'),
        ('Chaco', 'Chaco'),
        ('Cerrado Típico', 'Cerrado Típico'),
        ('Campo Inundável', 'Campo Inundável'),
        ('Campo não Inundável', 'Campo não Inundável'),
        ('Campo de Altitude (morraria', 'Campo de Altitude (morraria'),

    ]

    VEGETAL_CHOICES = [
        ('Florestal', 'Florestal'),
        ('Savânica', 'Savânica'),
        ('Campestre', 'Campestre'),
    ]

    EXTINCAO_CHOICES = [
        ('Sim', 'Sim'),
        ('Não', 'Não'),
    ]

    BIOMA_CHOICES = [
        ('Amazônia', 'Amazônia'),
        ('Caatinga', 'Caatinga'),
        ('Cerrado', 'Cerrado'),
        ('Mata Atlântica', 'Mata Atlântica'),
        ('Pampa', 'Pampa'),
        ('Pantanal', 'Pantanal'),
    ]

    ESTADOS_CHOICES = [
        ('AC', 'AC'),
        ('AL', 'AL'),
        ('AP', 'AP'),
        ('AM', 'AM'),
        ('BA', 'BA'),
        ('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'),
    ]

    # Campo bioma com a classe 'bioma' e id 'bioma'
    bioma = forms.MultipleChoiceField(
        choices=BIOMA_CHOICES,
        required=False,
        widget=forms.SelectMultiple(
            attrs={'id': 'biomaSelect', 'style': 'width:100%'}
        )
    )

    # Campo formacao_vegetal com a classe 'chkveg' e id 'chkveg'
    formacao_vegetal = forms.MultipleChoiceField(
        choices=VEGETAL_CHOICES,
        required=False,
        widget=forms.SelectMultiple(
            attrs={'id': 'formacaoVegetalSelect', 'style': 'width:100%'}
        )
    )

    # Campo fitofisionomias com a classe 'opcao2' e id 'opcao2'
    fitofisionomias = forms.MultipleChoiceField(
        choices=FITOFISIONOMIAS_CHOICES,  # Inicialmente, as escolhas estão vazias
        required=False,
        widget=forms.SelectMultiple(
            attrs={'id': 'fitofisionomiasSelect',
                   'style': 'width:100%',  'disabled': 'disabled'}
        )
    )

    # Outros campos
    especies = forms.CharField(
        required=True,
        max_length=200,
        widget=forms.TextInput(
            attrs={
                "type": "text",
                "class": "form-control",
            }
        )
    )

    nome_popular = forms.CharField(
        required=True,
        max_length=500,
        widget=forms.TextInput(
            attrs={
                "type": "text",
                "class": "form-control",
            }
        )
    )

    familia = forms.CharField(
        required=False,
        max_length=200,
        widget=forms.TextInput(
            attrs={
                "type": "text",
                "class": "form-control",
            }
        )
    )

    risco_extincao = forms.ChoiceField(
    required=False,
    choices=(('Não', 'Não'), ('Sim', 'Sim')),
    initial='Não',
    widget=forms.Select(
        attrs={
            "class": "form-select",
            "id": "risco_extincao",
        }
    ),
)

    presenca_estados = forms.MultipleChoiceField(
        choices=ESTADOS_CHOICES,
        required=False,
        widget=forms.SelectMultiple(
            attrs={'id': 'estados', 'name': 'estados', 'style': 'width:100%'})
    )

    sinonimia = forms.CharField(
        required=False,
        widget=forms.Textarea(
            attrs={'id': 'sinonimia', 'name': 'sinonimia',
                   'style': 'width:100%', 'cols': 5, 'rows': 5,
                   "class": "textarea"}
        )
    )

    foto_especie = forms.ImageField(
        label='',
        required=False,
        widget=forms.ClearableFileInput(attrs={"class": "form-control-file",
                                               "id": "input-foto", "style": "display: none;"})


    )

    TIPO_MUDA_CHOICES = [
        ('florestal', 'Florestal'),
        ('frutifera', 'Frutífera'),
        ('hortalica', 'Hortaliça'),
        ('leguminosa', 'Leguminosa'),
        ('outra', 'Outra'),
    ]

    tipo_muda = forms.ChoiceField(
        required=True,
        choices=TIPO_MUDA_CHOICES,
        initial='florestal',
        widget=forms.Select(
            attrs={
                "class": "form-select",
                "id": "tipo_muda"
            }
        )
    )