from rest_framework import serializers
from .models import OpportunityBundle, OpportunityBundleDistribution, OpportunityBundleLevel
from .rank import Rank

class OpportunityBundleSerializer(serializers.ModelSerializer):
    def validate_opportunity_bundle_amount(self, value):
        if value is None or value <= 0:
            raise serializers.ValidationError("Opportunity Bundle amount must be greater than 0.")
        return value

    class Meta:
        model = OpportunityBundle
        fields = '__all__'

# Legacy alias for backward compatibility
SchemeSerializer = OpportunityBundleSerializer


class OpportunityBundleDistributionSerializer(serializers.ModelSerializer):
    def validate_value(self, value):
        if value <= 0:
            raise serializers.ValidationError("Value must be greater than 0.")
        return value

    class Meta:
        model = OpportunityBundleDistribution
        fields = '__all__'

# Legacy alias for backward compatibility
SchemeDistributionSerializer = OpportunityBundleDistributionSerializer


class OpportunityBundleLevelSerializer(serializers.ModelSerializer):
    def validate_level_number(self, value):
        if value <= 0:
            raise serializers.ValidationError("Level number must be greater than 0.")
        return value

    def validate_required_positions(self, value):
        if value <= 0:
            raise serializers.ValidationError("Required positions must be greater than 0.")
        return value

    class Meta:
        model = OpportunityBundleLevel
        fields = '__all__'

# Legacy alias for backward compatibility
SchemeLevelSerializer = OpportunityBundleLevelSerializer


class RankSerializer(serializers.ModelSerializer):
    badge_image_url = serializers.SerializerMethodField()
    opportunity_bundle = serializers.PrimaryKeyRelatedField(queryset=OpportunityBundle.objects.all(), required=False, allow_null=True)

    class Meta:
        model = Rank
        fields = ["id", "opportunity_bundle", "level_number", "name", "badge_image", "badge_image_url", "badge_icon"]

    def get_badge_image_url(self, obj):
        request = self.context.get('request')
        if obj.badge_image and request:
            return request.build_absolute_uri(obj.badge_image.url)
        return None
