from rest_framework import serializers

from apps.referrals.models import PointsBalance, Referral, ReferralCode


class ReferralCodeSerializer(serializers.ModelSerializer):
    points = serializers.SerializerMethodField()
    referral_link = serializers.SerializerMethodField()

    class Meta:
        model = ReferralCode
        fields = ["code", "points", "referral_link"]

    def get_points(self, obj):
        balance, _ = PointsBalance.objects.get_or_create(user=obj.user)
        return balance.points

    def get_referral_link(self, obj):
        return f"https://rofoof.app/referral/{obj.code}"


class ReferralApplySerializer(serializers.Serializer):
    code = serializers.CharField(max_length=20)


class ReferralHistorySerializer(serializers.ModelSerializer):
    referred_name = serializers.CharField(source="referred.full_name", read_only=True)

    class Meta:
        model = Referral
        fields = ["id", "referred_name", "awarded_points", "created_at"]
