from rest_framework import serializers
from .models import TimeSlot
from status.models import Status
from django.core.exceptions import ValidationError as DjangoValidationError

class TimeSlotSerializer(serializers.ModelSerializer):
    organization_name = serializers.CharField(source='organization.name', read_only=True)
    status = serializers.SlugRelatedField(slug_field='slug', queryset=Status.objects.all())

    class Meta:
        model = TimeSlot
        fields = ('id', 'start_time', 'end_time', 'slot_name', 'slug', 'status', 'is_active', 'created_at', 'is_global', 'organization', 'organization_name')
        read_only_fields = ('slug',)

    def validate(self, data):
        # Create a temporary instance to call clean()
        instance = self.instance or TimeSlot(**data)
        if self.instance:
            for attr, value in data.items():
                setattr(instance, attr, value)
        
        try:
            instance.clean()
        except DjangoValidationError as e:
            # Convert Django ValidationError to DRF ValidationError
            if hasattr(e, 'message_dict'):
                raise serializers.ValidationError(e.message_dict)
            else:
                raise serializers.ValidationError(e.messages)

        return data

    def to_internal_value(self, data):
        if 'start_time' in data and 'end_time' in data and 'slot_name' not in data:
            data['slot_name'] = f"{data['start_time']} - {data['end_time']}"
        return super().to_internal_value(data)
