from rest_framework import routers, serializers, viewsets
from rest_framework import permissions
from rest_framework.decorators import api_view
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.csrf import ensure_csrf_cookie
from django.utils.decorators import method_decorator
from django.views.generic import View
import json
import sys
import re
from django.http import HttpResponse
from django.http import JsonResponse
from django.utils.dateparse import parse_date
from datetime import timedelta, date, datetime
import time

from .models import Respuesta, Pregunta
from property.models import Property

class RespuestasSerializer(serializers.BaseSerializer):
     permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
     def to_internal_value(self, data):
        pass
     def to_representation(self, obj):       
        mensaje = {'valoracion':0,'valoraciones':0,'encuestas':[]}
        if obj==None or len(obj)==0:
            return mensaje
        mensaje['valoraciones']= obj[0].prop.web.valoraciones()
        mensaje['valoracion'] = obj[0].prop.web.puntuacion()
        for item in obj:
            encuesta ={
                'customer': item.customer.user.first_name,
                'fecha': item.respuesta_customer_fecha_responde_date.strftime("%d/%m/%Y"),
                'valoracion': item.respuesta_media(),
                'texto': item.respuesta_comentario_text if item.respuesta_comentario_text != '' and item.respuesta_comentario_text!= None else '',
                'respuesta':item.respuesta_comentario_propiedad_text if item.respuesta_comentario_propiedad_text != '' and item.respuesta_comentario_propiedad_text!=None else '',
                'fecha_respuesta': item.respuesta_propiedad_date.strftime("%d/%m/%Y") if  item.respuesta_propiedad_date != None else '',
            }
            mensaje['encuestas'].append(encuesta)
        
        #data = {'data':mensaje,'code':200}
        return mensaje

@method_decorator(csrf_exempt, name='dispatch')
class JRespuestasServer(View):    
    #Punto de Servicio: http://test.conilhospeda.com:8088/jrespuestasservice/
    
    def get(self, request, *args, **kwargs):
        
        props = Property.objects.filter(slug=kwargs['slug'])
        if len(props) > 0:
            prop = props[0]
            encuestas = Respuesta.objects.filter(pregunta__id=Pregunta.objects.all()[0].id, respuesta_customer_fecha_responde_date__isnull=False,
                                     respuesta_eliminada=False, prop__id=prop.id, respuesta_comentario_text__isnull=False).order_by('-respuesta_customer_fecha_responde_date')
        else:
            data = {'error':'Propiedad sin encuestas','code':400} 
            return JsonResponse(data)

        serializer = RespuestasSerializer(encuestas)
        return JsonResponse(serializer.data)

RespuestasPuntoServicio = JRespuestasServer.as_view()