# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render

# Create your views here.

from rest_framework.response import Response
from rest_framework.views import APIView
from .models import WhookData
from .models import Campaign_contacto,Campaign
import datetime
from .dialog360 import Dialog360
from django.conf import settings
class SendProgramed(APIView):
    
    def send_plantilla(self, tel, template,perfil=None):
        D360 = Dialog360()
        re = False
        #if True:
        try:
            r = D360.enviatemplate(tel, template,perfil)
            re = r
        except:
           re = False
        return re

    def sendCamp(self,id):
        errores=[]
        
        camp_con = Campaign_contacto.objects.filter(
            campaign_id=id, estado__lt=2)
        camp = Campaign.objects.get(pk=id)
        if camp.estado<3:
            r = {'ok': False, 'msg': 'Mensaje Normal'}
            return r
        enviando = []
        camp.estado = 4
        camp.save()
        for con in camp_con:
            con2=Campaign_contacto.objects.get(pk=con.id)
            if con2.id_360 is not None and con2.estado!=10:
                continue
            con.estado = 10
            con.save()
            enviando.append(con.telefono)
            enviado = self.send_plantilla(con.telefono, camp,con.perfil)
            if enviado :
                if "messages"  in enviado:
                    if(enviado["messages"] and len(enviado["messages"]) == 1):
                        con.id_360 = enviado["messages"][0]["id"]
                else:
                    errores.append(enviado)
                    con.estado=5
                con.estado = 0
            else:
                con.estado = 5
            con.save()
        camp_con = Campaign_contacto.objects.filter(campaign_id=id)
        total = camp_con.count()
        camp_con = Campaign_contacto.objects.filter(campaign_id=id, estado=2)

        exito = camp_con.count()
        fallido = total-exito
        camp = Campaign.objects.get(pk=id)
        #print('id',id,' exito:',exito,' fallido:',fallido)

        camp.total = total
        camp.exitosos = exito
        camp.fallidos = fallido
        camp.estado = 2
        ahora2=datetime.datetime.now() 
        camp.fecha=ahora2
        camp.save()

        camp = Campaign.objects.get(pk=id)
        print ('estado:',camp.estado)


        r = {'ok': True, 'enviando': enviando,'errores':errores}
        return r
    def post(self,request):
        r={"ok":True}
        key=request.headers.get('X-Jdkey',None)
        if key and key==settings.JDAPIKEY:
            ahora=datetime.datetime.now() 
            camp=Campaign.objects.filter(estado__in=[4,3],hora_programada__lte=ahora)
            envios=[]
            for c in camp:
                r2=self.sendCamp(c.id)
                envios.append(r2)
                
                
            r['envios']=envios
            
        else:
            r={'ok':False,'comment':'BAD KEY'}
        return Response(r)
        
class WebHook(APIView):
    def post(self,request):
        r={"ok":True}
        wh=WhookData(data=str(request.data))
        statusues = request.data.get("statuses", None)
        estados=''
        ids=''
        if statusues:
            for s in statusues:
                id=s['id']
                contactos=Campaign_contacto.objects.filter(id_360=id)
                if(ids!=''):
                    ids+=', '
                if estados!='':
                    estados+=', '
                ids+=str(id)
                estados+=str(s['status'])

                for cn in contactos:
                    if s['status']=='sent' and cn.estado<=1:
                        cn.estado=1
                        cn.modificado=datetime.datetime.fromtimestamp(int(s['timestamp']))
                        cn.save()
                        
                    if s['status']=='delivered' and cn.estado<=2:
                        cn.estado=2
                        cn.modificado=datetime.datetime.fromtimestamp(int(s['timestamp']))
                        cn.save()

                    if s['status']=='read' and cn.estado<=3:
                        cn.estado=3
                        cn.modificado=datetime.datetime.fromtimestamp(int(s['timestamp']))
                        cn.save()
                    if s['status']=='failed':
                        cn.estado=5
                        cn.modificado=datetime.datetime.fromtimestamp(int(s['timestamp']))
                        cn.save()
                    if s['status']=='deleted':
                        cn.estado=4
                        cn.modificado=datetime.datetime.fromtimestamp(int(s['timestamp']))
                        cn.save()




                    

                
        wh.estados=estados
        wh.ids=ids
        wh.save()
        #print(str(request.data))
        return Response(r)
