import datetime
from django.contrib import messages
from django.core import serializers
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render

from Consultas.models import Extenos, Placas
from Permiso.models import Permisos
from Public.models import Servicios, Slider, Turnos, Videos
import calendar

# Create your views here.
meses=[(1,"Enero"),(2,"Febrero"),(3,"Marzo"),(4,"Abril"),
       (5,"Mayo"),(6,"Junio"),(7,"Julio"),(8,"Agosto"),
       (9,"Septiembre"),(10,"Octubre"),(11,"Noviembre"),(12,"Diciembre")]


def index(request):
    contexto={
        'externos':Extenos.objects.all(),
        'sliders':Slider.objects.filter(estado=True)
    }
    return render(request, 'public/index.html', contexto)

def servicios(request):
    if request.GET.get('id'):
        contexto={
            'servicio':Servicios.objects.get(id=request.GET.get('id')),
            'externos':Extenos.objects.all(),
        }
        return render(request,'public/services_id.html',contexto)
    contexto={
        'servicios':Servicios.objects.all(),
        'externos': Extenos.objects.all(),
    }
    return render(request,'public/servicios.html',contexto)

def consulta_placa(request):
    placa=None
    mensaje=None
    if request.GET.get('placa'):
        try:
            placa=Placas.objects.get(numero=str.upper(request.GET.get('placa')).strip())
            if placa.estado:
                mensaje="La placa %s ya fue entregada el dia %s a %s %s"%(placa.numero,placa.fecha_entrega, placa.nombres,placa.apellidos)
            else:
                mensaje="Por favor dirijase a retirar su placa física a las Nuevas instalaciones del Centro de Revisión " \
                        "Vehícular del Gad Municipal del Cantón El Guabo<br><br><br><strong>Requisitos:</strong><br>Copia " \
                        "la color y original de cédula " \
                        "<br>Copia a color y original de la matricula." \
                        "<br>Si la placa es retirada por un gestor por favor anexar copia " \
                        "de la credencial de gestor autorizado." \
                        "<br>Si se va a retirar por un tercero presentar un oficio de " \
                        "autorización simple que lo puede descargar desde " \
                        "<a href='/media/archivos/upload/2023/CARTA-DE-AUTORIZACION-SIMPLE-2.docx'>aquí.</a>"
        except:
            mensaje="La placa %s aún no esta disponible para ser retirada en la oficina, o es posible que el número no sea correcto..!"%str.upper(request.GET.get('placa'))

    contexto = {
        'mensaje': mensaje,
        'placa':placa,
        'externos': Extenos.objects.all(),
    }
    return render(request,'public/consulta_placa.html',contexto)

def consultar_multas(request):
    contexto={
        'enlace':'https://consultaweb.ant.gob.ec/PortalWEB/paginas/clientes/clp_criterio_consulta.jsp',
        'externos': Extenos.objects.all(),
    }
    return render(request,'public/consultas.html',contexto)






def turnos(request):
    c=calendar.TextCalendar(calendar.MONDAY)
    mes=datetime.datetime.now().month
    dia = datetime.datetime.now().day
    if request.GET.get('mes'):
        mes=int(request.GET.get('mes'))
    if request.GET.get('dia'):
        dia=int(request.GET.get('dia'))

    dd = list(c.itermonthdays4(datetime.datetime.now().year, mes))
    turnos = 0
    cant=0
    f_select =None
    try:
        f_select=datetime.datetime(datetime.datetime.now().date().year,mes,dia)
    except:
        f_select=None
    if request.POST:
        turnos = Turnos.objects.filter(fecha=datetime.datetime(datetime.datetime.now().date().year,mes,dia),web=True).count() + 1
        print('numero turnos', turnos)
        my_datetime = datetime.datetime(datetime.datetime.now().date().year,mes,dia, 8, 0)
        minutos = datetime.timedelta(hours=0,minutes=10*turnos)
        new_datetime = my_datetime + minutos
        hora=new_datetime.time()

        if turnos<=4:
            turno=Turnos.objects.create(
                fecha=datetime.datetime(datetime.datetime.now().date().year,mes,dia),
                cedula=request.POST.get('cedula'),
                nombres = request.POST.get('nombres'),
                apellidos = request.POST.get('apellidos'),
                numero=turnos,
                web=True,
                hora=hora,
                servicio_id=request.POST.get('tramite'),
            )
            turno.save()
            messages.add_message(request,messages.SUCCESS,'El turno se asigno correctamente..!')
        else:
            messages.add_message(request, messages.ERROR, 'Ya no hay cupos disponibles seleccione otra fecha..!')
        if not request.GET.get('dia'):
            return HttpResponseRedirect("/public/turnero?mes=%s&dia=%s" % (mes, dia))
        else:
            return HttpResponseRedirect("/public/turnero?mes=%s&dia=%s"%(mes,request.GET.get('dia')))
    contexto={
        'dias':dd,
        'mes':mes,
        'm':meses[mes-1][1],
        'meses':meses[datetime.datetime.now().month-1:],
        'servicios':Servicios.objects.filter(turno=True),
        #'turnos':Turnos.objects.filter(fecha=datetime.datetime(datetime.datetime.now().date().year,mes,dia)),
        'cant':turnos,
        'dia':dia,
        'mes_act':datetime.datetime.now().date().month,
        'an':datetime.datetime.now().date().year,
        'fecha_select':f_select,
        'dia_act':dia
    }
    return render(request,'public/calendario.html',contexto)

def asignar_atender_turno(request):
    permiso=Permisos.objects.get(usuario=request.user)
    turnos=Turnos.objects.filter(fecha=datetime.datetime.now().date(), atendido=False, modulo=0)
    turnos_us=Turnos.objects.filter(fecha=datetime.datetime.now().date(), atendido=False, modulo=permiso.modulo)
    if request.GET.get('id'):
        turno=Turnos.objects.get(id=request.GET.get('id'))
        turno.modulo=permiso.modulo
        turno.save()
        messages.add_message(request,messages.SUCCESS,turno.id)
    if request.GET.get('at'):
        turno = Turnos.objects.get(id=request.GET.get('at'))
        turno.atendido=True
        turno.save()
    contexto={
        'turnos':turnos,
        'turnos_us':turnos_us,
    }
    return render(request, 'public/turnos.html', contexto)

def turnoview(request):
    turnos=Turnos.objects.filter(fecha=datetime.datetime.now().date(), atendido=False, modulo__gt=0)
    turnos_=Turnos.objects.filter(fecha=datetime.datetime.now().date(), modulo__gt=0).order_by('-id')
    contexto={
        'turnos':turnos_,
        'turno':turnos.last(),
        'atendidos':turnos,
        'videos':Videos.objects.all(),
    }
    if request.GET.get('turno'):
        qs_json = serializers.serialize('json', turnos_)
        return HttpResponse(qs_json, content_type='application/json')
    return render(request, 'public/turnoview.html',contexto)