from rest_framework import serializers
from service.models.services import Services
from django.db import models

class ServiceSummarySerializer(serializers.ModelSerializer):
    id = serializers.ReadOnlyField()
    name = serializers.ReadOnlyField()
    # total_reviews = serializers.SerializerMethodField()
    # total_avg_star = serializers.SerializerMethodField()

    class Meta:
        model = Services
        fields = ['id', 'name'] # 'total_reviews', 'total_avg_star',

    def get_total_reviews(self, obj):
        return obj.service_review.count()
    
    def get_total_avg_star(self, obj):
        reviews = obj.service_review.all()
        if not reviews.exists():
            return 0.0
        avg = reviews.aggregate(models.Avg('review_star'))['review_star__avg']
        return round(avg or 0.0, 1)
    

class ReviewOnlySerializer(serializers.Serializer):
    total_reviews = serializers.SerializerMethodField()
    total_avg_star = serializers.SerializerMethodField()

    class Meta:
        model = Services
        fields = ['total_reviews', 'total_avg_star']

    def get_total_reviews(self, obj):
        return obj.service_review.count()
    
    def get_total_avg_star(self, obj):
        reviews = obj.service_review.all()
        if not reviews.exists():
            return 0.0
        avg = reviews.aggregate(models.Avg('review_star'))['review_star__avg']
        return round(avg or 0.0, 1)