from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.messages.views import SuccessMessageMixin
from django.db import models
from django.http import HttpResponseRedirect, JsonResponse
from django.shortcuts import render
from django.urls import reverse_lazy
from django.views import View
from django.views.generic import CreateView

from apps.historial.forms import HistorialForm
from apps.historial.models import Historial
from apps.usuarios.mixin import ValidatePermissionRequiredMixin
from apps.usuarios.models import Usuario


# Create your views here.
class historial(LoginRequiredMixin, SuccessMessageMixin, ValidatePermissionRequiredMixin, CreateView):
    template_name = 'historial.html'
    form_class = HistorialForm
    permission_required = 'historial.add_historial'

    def verifica_campos_booleanos(self, model_instances):
        for instance in model_instances:
            campos_booleanos = [getattr(instance, field.name) for field in instance._meta.fields if
                                isinstance(field, models.BooleanField)]
            if any(campos_booleanos):
                return True
        return False

    def obtiene_campos_booleanos_true(self, model_instance):
        campos_true = [field.name
                       for field in model_instance._meta.fields
                       if isinstance(field, models.BooleanField) and getattr(model_instance, field.name) == True]
        return campos_true

    def get(self, request, *args, **kwargs):
        person = self.request.user.id
        instancia = Historial.objects.all().filter(persona=person)
        otherinstace = Historial.objects.filter(persona=person).first()
        if instancia and otherinstace is not None:
            algun_campo_marcado = self.verifica_campos_booleanos(instancia)
            campos_true = self.obtiene_campos_booleanos_true(otherinstace)
            if algun_campo_marcado and campos_true:
                messages.success(request, 'Haz marcado uno o mas de estas preguntas consulte con un medico u otro '
                                          'profesional de la salud calificado antes de iniciar su programa de ejercicio!')
                return render(self.request, self.template_name, context={'form': HistorialForm(), 'formulario': campos_true})
        else:
            print('Datos ==> ', instancia)
        return render(self.request, self.template_name, context={'form': HistorialForm()})

    def post(self, request, *args, **kwargs):
        form = HistorialForm(request.POST)
        extra = request.POST
        id_us = self.request.user.id
        usuariolog = Usuario.objects.filter(id=id_us).first()
        print('form extra= ', extra)
        if form.is_valid():
            print('usuario= ', usuariolog.id)
            registro = form.save(commit=False)
            registro.persona = usuariolog
            print('form valido : ', registro)
            registro.save()
            messages.success(request, 'Si marca dos o mas de estas preguntas consulte con un medico u otro profesional de la salud calificado antes de iniciar su programa de ejercicio!')
            return HttpResponseRedirect(reverse_lazy('historial_'))
        else:
            print('Formulario de mierda ==>>',form)
            print(form.errors)
            messages.error(request, form.errors)
        return render(self.request, self.template_name, context={'form':HistorialForm()})


