from rest_framework import serializers
from .models import *
from common.common import validateParentId

#AIAssis Settings
class AIAssistSettingsSerializer(serializers.ModelSerializer):
    isAuthorized = serializers.SerializerMethodField()
    class Meta:
        model = AIAssistSettings
        fields = [
            "isAgree",
            "isEnabled",
            "createdDate",
            "updatedDate",
            "parentId",
            "isAuthorized",
        ]

    def get_isAuthorized(self,instance):
        return validateParentId(self,instance.parentId.id)

    def validate(self, data):
        errorMessage = ""
        isCheck = False

        if "isAgree" in data:
            if bool(data["isAgree"]) == True:
                if "parentId" in data:
                    isCheck = validateParentId(self, data["parentId"].id)
                else:
                    errorMessage = "Parent Id does not exit"
            else:
                errorMessage = "User must agree"
        else:
            errorMessage = "Is Agree field is required"

        if isCheck == True:
            return data

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

#Chat
class ChatSerializer(serializers.ModelSerializer):
    isAuthorized = serializers.SerializerMethodField()
    class Meta:
        model = Chat
        fields = [
            "id",
            "createdDate",
            "updatedDate",
            "parentId",
            "isAuthorized",
        ]

    def get_isAuthorized(self,instance):
        errorMessage = ""
        if validateParentId(self,instance.parentId.id) == True:
            dataList = AIAssistSettings.objects.filter(parentId = instance.parentId.id)
            if dataList.__len__() > 0:
                if dataList[0].isEnabled == True:
                    return True
                else:
                    errorMessage = "Please Enable AI Assist in chat"
            else:
                errorMessage = "Please Enable AI Assist Settings in chat"
        else:
            errorMessage = "Parent Id is required in Chat"
        
        if len(errorMessage) > 0:
            raise serializers.ValidationError({"error": [errorMessage]})


    def validate(self, data):
        errorMessage = ""
        isCheck = False
        if "parentId" in data:
            isCheck = validateParentId(self, data["parentId"].id)
            if isCheck == True:
                dataList = AIAssistSettings.objects.filter(parentId = data["parentId"].id)
                if dataList.__len__() > 0:
                    if dataList[0].isEnabled == True:
                        return data
                    else:
                        errorMessage = "Please Enable AI Assist in chat"
                else:
                    errorMessage = "Please Enable AI Assist Settings in chat"
            else:
                errorMessage = "Parent Id is invalid"
        else:
            errorMessage = "Parent Id does not exit"

        if isCheck == True:
            return data

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

#Message
class MessageSerializer(serializers.ModelSerializer):
    isAuthorized = serializers.SerializerMethodField()
    class Meta:
        model = Message
        fields = [
            "id",
            "message",
            "role",
            "isUser",
            "createdDate",
            "updatedDate",
            "chatId",
            "isAuthorized",
        ]

    def get_isAuthorized(self,instance):

        if self.context.__contains__("request"):
            chatId = self.context["request"].query_params.get("chatId", None)
            if chatId is not None:
                if instance.chatId.id == int(chatId):
                    if validateParentId(self,instance.chatId.parentId.id)== True:
                        dataList = AIAssistSettings.objects.filter(parentId = instance.chatId.parentId.id)
                        if dataList.__len__() > 0:
                            if dataList[0].isEnabled == True:
                                return True
                            else:
                                errorMessage = "Please Enable AI Assist in chat"
                        else:
                            errorMessage = "Please Enable AI Assist Settings in chat"
                    else:
                        errorMessage = "Parent Id is invalid"
                else:
                    errorMessage = "chatId is invalid"
            else:
                errorMessage = "chatId is Required"
        else:
            errorMessage = "Request is required"
            
        if len(errorMessage) > 0:
            raise serializers.ValidationError({"error": [errorMessage]})
    
    def validate(self, data):
        errorMessage = ""
        chatId = self.context["request"].query_params.get("chatId", None)
        if "chatId" in data:
            if data["chatId"].id == int(chatId):
                if validateParentId(self,data["chatId"].parentId.id)== True:
                    dataList = AIAssistSettings.objects.filter(parentId = data["chatId"].parentId.id)
                    if dataList.__len__() > 0:
                        if dataList[0].isEnabled == True:
                            errorMessage = ""
                        else:
                            errorMessage = "Please Enable AI Assist in chat"
                    else:
                        errorMessage = "Please Enable AI Assist Settings in chat"
                else:
                    errorMessage = "Parent Id is invalid"
            else:
                errorMessage = "ChatId is invalid"
        else:
            errorMessage = "chatId is Required"

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