from django import forms

from apps.usuarios.models import Usuario
from django.contrib.auth.models import Group
#
# TIPO_USER_CHOICE = (
#     ('','Seleccione un tipo de Usuario'),
#     ('Administrador','Administrador'),
#     ('Gestor de contenido','Gestor de contenido'),
#     ('Cliente','Cliente'),
# )

class PerfilForm(forms.ModelForm):

    email = forms.EmailField(
        widget=forms.EmailInput(
            attrs={'class': 'form-control',
                   'placeholder': 'ejemplo@ejemplo.com',
                    'readonly':'readonly'
                   }
        ))

    first_name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Nombre'}))
    last_name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Apellido'}))
    username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Usuario'}))
    date_of_birth = forms.DateField(widget=forms.DateInput(attrs={'class':'form-control','type': 'date',}))
    num_document = forms.CharField(widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'Cedula'}))
    phone_number = forms.CharField(widget=forms.NumberInput(attrs={'class':'form-control','placeholder':'Telefono'}))
    address = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Dirección'}))
    gender = forms.ChoiceField(choices=(('0', 'Seleccione el Genero'),('1', 'Masculino'), ('2', 'Femenino')), widget=forms.Select(attrs={'class': 'form-control', 'placeholder': 'Genero'}))
    img_profile = forms.ImageField(max_length=250,widget=forms.FileInput(attrs={'placeholder': 'Imagen','id': 'file_imagen','required': False, 'onchange':'showPreview(event);'}))

    class Meta:
        model = Usuario
        fields = ('email',
    'first_name',
    'last_name',
    'username',
    'date_of_birth',
    'num_document',
    'phone_number',
    'address',
    'gender',
    'img_profile')
        exclude = ['is_superuser', 'password', 'rpassword']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['date_of_birth'].widget.format = '%Y-%m-%d'


class ChangePwdForm(forms.ModelForm):
    old_password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'Antigua Contraseña'}))
    new_password1 = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'Nueva Contraseña'}))
    new_password2 = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'Confirmar Contraseña'}))

    class Meta:
        model = Usuario
        fields = ('old_password','new_password1','new_password2',)


class CreateUserForm(forms.ModelForm):
    first_name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Nombres Completos'}))
    last_name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Apellidos Completos'}))
    email = forms.EmailField(widget=forms.EmailInput(attrs={'class':'form-control','placeholder':'Correo Electronico'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'Contraseña'}))
    password1 = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'Confirma la contraseña'}))
    username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Usuario de Ingreso'}))
    img_profile = forms.ImageField(max_length=250,widget=forms.FileInput(attrs={'id':'file_input','type':'file','onchange':"showPreview(event)"}))
    num_document = forms.CharField(widget=forms.NumberInput(attrs={'class':'form-control','id':'cedula','placeholder':'Cedula', 'type':'number', 'onkeyup':"contarCaracteres(1)"}))
    phone_number = forms.CharField(widget=forms.NumberInput(attrs={'class':'form-control','id':'celular','placeholder':'Celular', 'type':'number' ,'onkeyup':"contarCaracteres(2)"}))
    gender = forms.ChoiceField(choices=(('0', 'Seleccione el Genero'),('1', 'Masculino'), ('2', 'Femenino')), widget=forms.Select(attrs={'class': 'form-control', 'placeholder': 'Genero'}))
    date_of_birth = forms.DateField(widget=forms.DateInput(attrs={'class':'form-control','type': 'date','placeholder':'YYYY-MM-DD'}))
    address = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Direccion de Residencia'}))
    # Recupera la primera instancia de Group
    initial_group = Group.objects.all()

    tipo_usuario = forms.ModelChoiceField(queryset=initial_group, empty_label="Selecciona un tipo de usuario", widget=forms.Select(attrs={'class':'form-control',}))



    class Meta:
        model = Usuario
        fields = (
                 'first_name',
                  'email',
                  'last_name',
                  'password',
                  'password1',
                  'username',
                  'num_document',
                  'phone_number',
                  'gender',
                  'date_of_birth',
                  'address',
                  'img_profile',
                  'tipo_usuario'
                  )

    def clean(self):
        cleaned_data = super().clean()
        password = cleaned_data.get('password')
        password1 = cleaned_data.get('password1')

        if password and password1 and password != password1:
            raise forms.ValidationError('Las contraseñas no coinciden.')

    def __init__(self, *args, **kwargs):
        super(CreateUserForm, self).__init__(*args, **kwargs)
        self.fields['tipo_usuario'].queryset = Group.objects.all()


    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['date_of_birth'].widget.format = '%Y-%m-%d'

    def save(self, commit=True):
        user = super().save(commit=False)
        user.set_password(self.cleaned_data['password'])
        if commit:
            user.save()
        return user

CATAGEORY_CHOICE = (
    ('add_category','Adicionar'),
    ('change_category','Modificar'),
    ('delete_category','Eliminar'),
    ('view_category','Visualizar'),
)

POST_CHOICE = (
    ('add_post', 'Adicionar'),
    ('change_post', 'Modificar'),
    ('delete_post','Eliminar'),
    ('view_post','Visualizar'),
)

Antropometria_CHOICE = (
    ('add_relacion_cintura_cadera','Adicionar'),
    ('change_relacion_cintura_cadera','Modificar'),
    ('delete_relacion_cintura_cadera','Eliminar'),
    ('view_relacion_cintura_cadera','Visualizar'),
)

TestRockport_CHOICE = (
    ('add_testrockport','Adicionar'),
    ('change_testrockport','Modificar'),
    ('delete_testrockport','Eliminar'),
    ('view_testrockport','Visualizar'),
)

# TestTecumseh_CHOICE = (
# ('add_testtecumseh','Adicionar'),
# ('change_testtecumseh','Modificar'),
# ('delete_testtecumseh','Eliminar'),
# ('view_testtecumseh','Visualizar'),)
#
# TestRuffier_CHOICE = (
# ('add_testruffier','Adicionar'),
# ('change_testruffier','Modificar'),
# ('delete_testruffier','Eliminar'),
# ('view_testruffier','Visualizar'),)
#
# TestWells_CHOICE = (
# ('add_testwells','Adicionar'),
# ('change_testwells','Modificar'),
# ('delete_testwells','Eliminar'),
# ('view_testwells','Visualizar'),)
#
# TestFlexiones_CHOICE = (
# ('add_testflexiones','Adicionar'),
# ('change_testflexiones','Modificar'),
# ('delete_testflexiones','Eliminar'),
# ('view_testflexiones','Visualizar'),)
#
# TestAbdominal_CHOICE = (
# ('add_testabdominal','Adicionar'),
# ('change_testabdominal','Modificar'),
# ('delete_testabdominal','Eliminar'),
# ('view_testabdominal','Visualizar'),)
#
# TestPierna_CHOICE =(
# ('add_testpierna','Adicionar'),
# ('change_testpierna','Modificar'),
# ('delete_testpierna','Eliminar'),
# ('view_testpierna','Visualizar'),)

Programas_CHOICE = (
('add_propiedades','Adicionar'),
('change_propiedades','Modificar'),
('delete_propiedades','Eliminar'),
('view_propiedades','Visualizar'),)
###
# add_histor
# add_historial
# change_historial
# delete_historial
# view_historia

Historial_CHOICE = (
('add_historial','Adicionar'),
('change_historial','Modificar'),
('delete_historial','Eliminar'),
('view_historial','Visualizar'),)

Usuarios_CHOICE = (
('add_usuario','Adicionar'),
('change_usuario','Modificar'),
('delete_usuario','Eliminar'),
('view_usuario','Visualizar'),)


Grupos_CHOICE = (
('add_group','Adicionar'),
('change_group','Modificar'),
('delete_group','Eliminar'),
('view_group','Visualizar'),)




class GroupForm(forms.ModelForm):

    name = forms.CharField(label="Grupo", max_length=50, required=False,
                                widget=forms.TextInput(
                                    attrs={
                                        'type': 'text',
                                        'class': 'form-control forminputs',
                                        'placeholder': 'Grupo',
                                        'id':'name',
                                        # 'readonly':'readonly',
                                        # 'disabled':'disabled'
                                    }
                                ))

    post = forms.MultipleChoiceField(choices=POST_CHOICE, required=False,
                                      widget=forms.CheckboxSelectMultiple,)


    rockport = forms.MultipleChoiceField(choices=TestRockport_CHOICE, required=False,
                                       widget=forms.CheckboxSelectMultiple,)


    usuarios = forms.MultipleChoiceField(choices=Usuarios_CHOICE, required=False,
                                         widget=forms.CheckboxSelectMultiple,)

    grupos = forms.MultipleChoiceField(choices=Grupos_CHOICE, required=False,
                                         widget=forms.CheckboxSelectMultiple,)

    antropometria = forms.MultipleChoiceField(choices=Antropometria_CHOICE, required=False,
                                         widget=forms.CheckboxSelectMultiple,)

    historial = forms.MultipleChoiceField(choices=Historial_CHOICE, required=False,
                                         widget=forms.CheckboxSelectMultiple,)

    programas = forms.MultipleChoiceField(choices=Programas_CHOICE, required=False,
                                         widget=forms.CheckboxSelectMultiple,)

    grupos = forms.MultipleChoiceField(choices=Grupos_CHOICE, required=False,
                                         widget=forms.CheckboxSelectMultiple,)



    class Meta:
        model = Group
        fields = (
            'name',
            'post',
            'rockport',
            'usuarios',
            'grupos',
            'antropometria',
            'historial',
            'programas'
        )


