from rest_framework import serializers
from .models import Chat
from accounts.models import Users
from django.db.models import Q


class UserSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    name = serializers.CharField()
    profile_pic = serializers.ImageField()


class ChatSerializer(serializers.Serializer):
    id = serializers.IntegerField()
    sender = serializers.IntegerField(source="sender.id")
    receiver = serializers.IntegerField(source="receiver.id")
    message = serializers.CharField()
    message_type = serializers.IntegerField()
    unread_messages = serializers.SerializerMethodField()
    status = serializers.IntegerField()
    created_at = serializers.DateTimeField()
    updated_at = serializers.DateTimeField()
    user = serializers.SerializerMethodField()
    work_id = serializers.IntegerField()
    work_sub_category_id = serializers.IntegerField()
    work_name = serializers.CharField(source="work.name")
    sub_category_name = serializers.CharField(source="work_sub_category.name")

    def get_user(self, obj):
        if obj.sender.id == self.context['user_id']:
            try:
                data = Users.objects.get(id = obj.receiver.id)
                serializer = UserSerializer(data, many=False)
                return serializer.data
            except Exception as e:
                return {}
        else:
            try:
                data = Users.objects.get(id = obj.sender.id)
                serializer = UserSerializer(data, many=False)
                return serializer.data
            except Exception as e:
                return {}
            
            
    def get_unread_messages(self, obj):
        unread_count = Chat.objects.filter(Q(receiver_id = self.context['user_id']) & Q(sender_id = obj.sender_id) & ~Q(sender_id = self.context['user_id']) & Q(status = 0)).count()
        return(unread_count)


