from django.shortcuts import render
from rest_framework import viewsets
from apis.serializers import *
from rest_framework.decorators import action
from rest_framework.response import Response


# Create your views here.
def index(request):
    return render(request, 'index.html')


class UserTypeViewSet(viewsets.ModelViewSet):
    queryset = UserTypeModel.objects.filter(hideStatus=0)
    serializer_class = UserTypeModelSerializers

    @action(detail=True, methods=['GET'])
    def listing(self, request, pk=None):
        if request.headers['token'] != "":
            if pk == "0":
                serializer = UserTypeModelSerializers(
                    UserTypeModel.objects.filter(hideStatus=0).order_by('-isDefault'), many=True)
            else:
                serializer = UserTypeModelSerializers(
                    UserTypeModel.objects.filter(hideStatus=0, userId=pk).order_by('-isDefault'), many=True)
            response = {'code': 1, 'data': serializer.data, 'message': "All  Retried"}
        else:
            response = {'code': 0, 'data': [], 'message': "Token is invalid"}
        return Response(response)

    @action(detail=True, methods=['POST'])
    def processing(self, request, pk=None):
        if request.headers['token'] != "":
            if pk == "0":
                serializer = UserTypeModelSerializers(data=request.data)
            else:
                serializer = UserTypeModelSerializers(instance=UserTypeModel.objects.get(id=pk),
                                                         data=request.data)
            UserTypeModel.objects.filter(userId=request.data['userId']).update(isDefault='0')
            if serializer.is_valid():
                serializer.save()
                UserTypeModel.objects.filter(id=serializer.data['id']).update(isDefault='1')
                response = {'code': 1, 'message': "Done Successfully"}
            else:
                response = {'code': 0, 'message': "Unable to Process Request"}
        else:
            response = {'code': 0, 'message': "Token is invalid"}
        return Response(response)

    @action(detail=True, methods=['GET'])
    def deletion(self, request, pk=None):
        UserTypeModel.objects.filter(id=pk).update(hideStatus='1')
        response = {'code': 1, 'message': "Done Successfully"}
        return Response(response)


class UserViewSet(viewsets.ModelViewSet):
    queryset = UserModel.objects.filter(hideStatus=0)
    serializer_class = UserModelSerializers

    @action(detail=True, methods=['GET'])
    def listing(self, request, pk=None):
        if pk == "0":
            serializer = UserModelSerializers(UserModel.objects.filter(hideStatus=0, userType=3), many=True)
        else:
            serializer = UserModelSerializers(UserModel.objects.filter(hideStatus=0, id=pk, userType=3), many=True)
        return Response({'code': 1, 'data': serializer.data, 'message': "All List Retried"})

    @action(detail=False, methods=['POST'])
    def login(self, request, pk=None):
        if UserModel.objects.filter(emailAddress=request.data['emailAddress'], password=request.data['password'], hideStatus=0, userType=3).count() > 0:
            serializer = UserModelSerializers(UserModel.objects.get(emailAddress=request.data['emailAddress'], password=request.data['password'], hideStatus=0), many=False)
            result = {'code': 0, 'data': serializer.data, 'message': "All List Retried"}
        else:
            result = {'code': 0, 'data': {}, 'message': "All List Retried"}
        return Response(result)

    @action(detail=False, methods=['POST'])
    def admin_login(self, request, pk=None):
        if UserModel.objects.filter(emailAddress=request.data['emailAddress'], password=request.data['password'], hideStatus=0, userType=1).count() > 0:
            serializer = UserModelSerializers(UserModel.objects.get(emailAddress=request.data['emailAddress'], password=request.data['password'], hideStatus=0), many=False)
            result = {'code': 0, 'data': serializer.data, 'message': "All List Retried"}
        else:
            result = {'code': 0, 'data': {}, 'message': "All List Retried"}
        return Response(result)

    @action(detail=True, methods=['POST'])
    def processing(self, request, pk=None):
        if pk == "0":
            serializer = UserModelSerializers(data=request.data)
        else:
            serializer = UserModelSerializers(instance=UserModel.objects.get(id=pk), data=request.data)
        if serializer.is_valid():
            serializer.save()
            response = {'code': 1, 'data': serializer.data, 'message': "Done Successfully"}
        else:
            response = {'code': 0, 'data': {}, 'message': "Unable to Process Request"}
            # response = {'code': 0, 'data': 0, 'message': serializer.errors}
        return Response(response)

    @action(detail=True, methods=['GET'])
    def deletion(self, request, pk=None):
        UserModel.objects.filter(id=pk).update(hideStatus='1')
        response = {'code': 1, 'message': "Done Successfully"}
        return Response(response)
