from rest_framework import serializers
from categories.models import Category
from users.serializers import UserSerializer
from follows.models import FollowCategory


class CategorySerializer(serializers.ModelSerializer):
    created_by_user = UserSerializer(source='created_by', read_only=True)
    followers_count = serializers.IntegerField(read_only=True)
    posts_count = serializers.IntegerField(read_only=True)
    is_following = serializers.SerializerMethodField()

    class Meta:
        model = Category
        fields = ['id', 'title', 'description', 'created_at', 'updated_at', 'created_by', 'created_by_user', 'followers_count', 'posts_count', 'shared_count', 'is_following', 'allow_saving']
        read_only_fields = ['id', 'created_at', 'updated_at', 'created_by']

    def get_is_following(self, obj):
        request = self.context.get('request')
        if request and request.user.is_authenticated:
            return FollowCategory.objects.filter(user=request.user, category=obj).exists()
        return False


class CategoryCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['title', 'description']