from rest_framework import serializers
from .models import *
from datetime import datetime
from django.http import JsonResponse
from common.common import generateToken

class AddDeviceSerializer(serializers.Serializer):
    deviceOSTypeId = serializers.IntegerField()
    token = serializers.CharField()

    def create(self, validated_data):

        errorMessage = ""
        
        registeredDevice = None

        if validated_data["token"] == "None":
            validated_data["token"] = ""

        registeredDeviceList = RegisteredDevice.objects.filter(token = validated_data["token"])

        if registeredDeviceList.__len__() > 0:
            registeredDevice = registeredDeviceList[0]

        if registeredDevice == None:
            selectedDeviceOSType = None
            
            dataList =  DeviceOSType.objects.filter(id = validated_data["deviceOSTypeId"])
            
            if dataList.__len__() > 0:
                selectedDeviceOSType = dataList[0]
            else:
                errorMessage = "Invalid Device OS Type is already registered"

            if len(errorMessage) > 0:
                raise serializers.ValidationError({"error": [errorMessage]})

            token = generateToken(55)
            registeredDevice = RegisteredDevice(token = token,createdDate = datetime.now(),updatedDate = datetime.now(),deviceOSTypeId = selectedDeviceOSType)
            registeredDevice.save()
            
            return JsonResponse({
                    "id":registeredDevice.id,
                    "token":registeredDevice.token,
                    "deviceOSTypeId":registeredDevice.deviceOSTypeId.id,
                    "createdDate":registeredDevice.createdDate,
                    "updatedDate":registeredDevice.updatedDate,
                })
        else:
            return JsonResponse({
                    "id":registeredDevice.id,
                    "token":registeredDevice.token,
                    "deviceOSTypeId":registeredDevice.deviceOSTypeId.id,
                    "createdDate":registeredDevice.createdDate,
                    "updatedDate":registeredDevice.updatedDate,
                })

class RegisteredDeviceSerializer(serializers.ModelSerializer):
    class Meta:
        model = RegisteredDevice
        fields = [
            "id",
            "token",
            "createdDate",
            "updatedDate",
            "deviceOSTypeId"
        ]

class UserNavSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserNav
        fields = [
            "id",
            "navName",
            "createdDate",
            "updatedDate",
            "registeredDeviceId",
        ]