from rest_framework import serializers
from slider.models.slider import Slider

class SliderSerializer(serializers.ModelSerializer):
    id = serializers.ReadOnlyField()
    image_url_path = serializers.SerializerMethodField('get_image_url')

    class Meta:
        model = Slider
        fields = ['id', 'name', 'image_url','image_url_path', 'order_number', 'is_active', 'created_at', 'updated_at',
            'created_by', 'updated_by'
        ]
        read_only_fields = ['id', 'created_at', 'updated_at']

    def validate_order_number(self, value):
        request = self.context.get('request', None)
        method = request.method if request else None
        
        if method == "POST":
            if Slider.objects.filter(order_number=value, is_active=True).exists():
                raise serializers.ValidationError("A slider with this order number already exists!")
        
        elif method in ["PUT", "PATCH"]:
            instance = getattr(self, 'instance', None)
            if instance and Slider.objects.filter(order_number=value, is_active=True).exclude(pk=instance.pk).exists():
                raise serializers.ValidationError("A slider with this order number already exists!")
            
        return value
    
    def get_image_url(self, obj):
        request = self.context.get("request")
        if obj.image_url and hasattr(obj.image_url, 'url'):
            return request.build_absolute_uri(obj.image_url.url)
        return None
