from rest_framework import serializers

from structures.models import Structure

from .models import BookingService, Service


class ServiceSerializer(serializers.ModelSerializer):
    class Meta:
        model = Service
        fields = [
            "id",
            "structure",
            "name",
            "default_price",
            "vat_rate",
            "is_active",
            "created_at",
            "updated_at",
        ]
        read_only_fields = ["id", "created_at", "updated_at"]

    def validate_structure(self, value):
        request = self.context.get("request")
        if request and not Structure.objects.filter(id=value.id, user=request.user).exists():
            raise serializers.ValidationError("You do not have access to this structure.")
        return value

    def validate_name(self, value):
        value = (value or "").strip()
        if not value:
            raise serializers.ValidationError("Service name cannot be blank.")
        return value


class BookingServiceSerializer(serializers.ModelSerializer):
    service_name = serializers.CharField(source="service.name", read_only=True)

    class Meta:
        model = BookingService
        fields = [
            "id",
            "service",
            "service_name",
            "price",
            "vat_rate",
            "created_at",
            "updated_at",
        ]
        read_only_fields = fields
