from rest_framework import serializers
from comments.models import Comment
from users.serializers import UserSerializer


class CommentSerializer(serializers.ModelSerializer):
    created_by = UserSerializer(read_only=True)
    likes_count = serializers.SerializerMethodField()
    is_liked = serializers.SerializerMethodField()

    class Meta:
        model = Comment
        fields = ['id', 'post', 'created_by', 'content', 'created_at', 'updated_at',
                  'is_active', 'likes_count', 'is_liked']
        read_only_fields = ['id', 'created_at', 'updated_at', 'created_by']

    def get_likes_count(self, obj):
        from likes.models import LikeComment
        return LikeComment.objects.filter(comment=obj).count()

    def get_is_liked(self, obj):
        from likes.models import LikeComment
        request = self.context.get('request')
        if request and request.user.is_authenticated:
            return LikeComment.objects.filter(user=request.user, comment=obj).exists()
        return False


class CommentCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = ['post', 'content']