# *coding: utf-8*
from api.serializers import *
from rest_framework import generics
from rest_framework import permissions
from oauth2_provider.ext.rest_framework import TokenHasReadWriteScope
from django.shortcuts import render, HttpResponse
from rest_framework.decorators import api_view
from django.db.models import Count
import django_filters
from django.db import connection
from base64 import b64decode
from django.core.files.base import ContentFile
import json
import sendgrid
@api_view(['GET'])
def checkAPI(request):
    response = HttpResponse("OK")
    response['Cache-Control'] = 'no-cache'
    return response

@api_view(['GET'])
def sendMessageEmail(request):
    ### SEND WELCOME TEMPLATE EMAIL
    email = request.GET['email']
    subject = request.GET['subject']
    message = request.GET['message']
    sg = sendgrid.SendGridAPIClient(apikey=settings.SENDGRID_API_KEY)
    data = {
        "personalizations": [
            {
                "to": [
                    {
                        "email": email
                    }
                ],
                "subject": subject
            }
        ],
        "from": {
            "email": "Agender <csurbier@idevotion.fr>"
        },
        "content": [
        {
            "type": "text/html",
                "value": "<strong>"+message+"</strong>"
        }
        ],

        "template_id": settings.MESSAGE_TEMPLATE_ID
    }
    response = sg.client.mail.send.post(request_body=data)
    return HttpResponse('OK')

class UploadUserPhotoBase64(generics.ListCreateAPIView):

    def post(self, request, format=None):
        if request.method == "POST":
            data = request._data
            userId = data['id']
            image_base64 = data['mainPhoto']
            fileName = data['filename']
            format, imgstr = image_base64.split(';base64,')  # format ~= data:image/X,
            # Get user
            user = User.objects.get(pk=userId)
            user.mainPhoto = ContentFile(b64decode(imgstr), name=fileName)
            user.save()
            response = HttpResponse("OK")
            response['Cache-Control'] = 'no-cache'
            return response
        else:
            response = HttpResponse("KO")
            response['Cache-Control'] = 'no-cache'
            return response


class UserFilter(django_filters.rest_framework.FilterSet):
    class Meta:
        model = User
        fields = ['id','email', 'facebookId', 'twitterId','username','valid','password','online','refTown','acceptCommunity']

class PhotoProfileFilter(django_filters.rest_framework.FilterSet):
    class Meta:
        model = PhotoProfile
        fields = ['refUser']

class FollowFilter(django_filters.rest_framework.FilterSet):
    class Meta:
        model = Follow
        fields = ['follower','following']

class UserListView(generics.ListCreateAPIView):
    """
                 Créer/Renvoi la listes des users<br>
     """
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = User.objects.all()
    serializer_class = UserSerializer
    ordering = ('-last_login',)
    filter_class = UserFilter
    #filter_backends = (DjangoFilterBackend,)



class UserPhotoUpdateView(generics.RetrieveUpdateDestroyAPIView):
    """
            update un user avec Photo
    """
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = User.objects.all()
    serializer_class = UserWithPhotoSerializer
    ordering_fields = ('updatedAt',)
    filter_class = UserFilter



class UserDetailView(generics.RetrieveUpdateDestroyAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = User.objects.all()
    serializer_class = UserSerializer

class PhotoProfileListView(generics.ListAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = PhotoProfile.objects.all()
    serializer_class = PhotoProfileSerializer
    ordering_fields = ('updatedAt',)
    filter_class = PhotoProfileFilter


class CreatePhotoView(generics.CreateAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = Photo.objects.all()
    serializer_class = PhotoSerializer


class CreatePhotoProfileView(generics.CreateAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = PhotoProfile.objects.all()
    serializer_class = CreatePhotoProfileSerializer

class FollowListView(generics.ListCreateAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = Follow.objects.all().select_related('follower').select_related('following')
    serializer_class = FollowSerializer
    filter_class = FollowFilter

class FollowDetailView(generics.RetrieveUpdateDestroyAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = Follow.objects.all().select_related('follower').select_related('following')
    serializer_class = FollowSerializer

class FollowInfoListView(generics.ListAPIView):
    #permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = Follow.objects.all().select_related('follower').select_related('following')
    serializer_class = FollowInfosSerializer
    filter_class = FollowFilter
    pagination_class = NoPaginationResults
