# progress/serializers.py

from rest_framework import serializers
from django.contrib.auth.models import User
from .models import SubjectProgress, SkillMastery
from gamification.models import League

class SkillMasteryForProfileSerializer(serializers.ModelSerializer):
    skill_name = serializers.CharField(source='skill.name', read_only=True)
    progress_percentage = serializers.SerializerMethodField()
    class Meta:
        model = SkillMastery
        fields = ['skill_name', 'progress_percentage']
    def get_progress_percentage(self, obj):
        max_score = obj.skill.max_score
        if max_score > 0:
            return round((obj.mastery_score / max_score) * 100)
        return 0

# *** این سریالایزر برای ارسال تمام آمار نوار بالایی اصلاح شد ***
class SubjectProgressSerializer(serializers.ModelSerializer):
    # فیلد جدید برای خواندن جم سراسری از پروفایل کاربر
    gem = serializers.IntegerField(source='user.profile.gem', read_only=True)

    class Meta:
        model = SubjectProgress
        # حالا شامل تمام آمارهای مورد نیاز نوار بالایی است
        fields = ['subject', 'total_xp', 'hearts', 'streak', 'gem']

# --- سریالایزرهای لیگ (بدون تغییر) ---
class LeagueSerializer(serializers.ModelSerializer):
    class Meta:
        model = League
        fields = ['level_number', 'name', 'icon']

class LeagueUserSerializer(serializers.ModelSerializer):
    username = serializers.CharField(source='user.username', read_only=True)
    rank = serializers.IntegerField(read_only=True) 
    class Meta:
        model = SubjectProgress
        fields = ['username', 'weekly_xp', 'rank']

class LeagueGroupDataSerializer(serializers.Serializer):
    league_info = LeagueSerializer()
    group_members = LeagueUserSerializer(many=True)
    hall_of_fame = LeagueUserSerializer(many=True)
    current_user_rank_info = LeagueUserSerializer(required=False, allow_null=True)
