from rest_framework import serializers
from .models import MenuItem, MenuImage

from rest_framework import serializers
from .models import Category


class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = ['id', 'name']
class MenuImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = MenuImage
        fields = ['id', 'image']


class MenuItemSerializer(serializers.ModelSerializer):
    images = MenuImageSerializer(many=True, read_only=True)
    order_count = serializers.IntegerField(read_only=True)

    class Meta:
        model = MenuItem
        fields = '__all__'
        
class MenuItemCreateSerializer(serializers.ModelSerializer):
    images = serializers.ListField(
        child=serializers.ImageField(),
        write_only=True,
        required=False
    )

    class Meta:
        model = MenuItem
        fields = [
            'name',
            'description',
            'price',
            'order_fee',
            'delivery_fee',
            'available',
            'category',
            'images'
        ]

    def create(self, validated_data):
        images_data = validated_data.pop('images', [])
        menu_item = MenuItem.objects.create(**validated_data)

        for image in images_data:
            MenuImage.objects.create(menu_item=menu_item, image=image)

        return menu_item

    def update(self, instance, validated_data):
        images_data = validated_data.pop('images', None)
        for attr, value in validated_data.items():
            setattr(instance, attr, value)
        instance.save()

        if images_data is not None:
            for image in images_data:
                MenuImage.objects.create(menu_item=instance, image=image)

        return instance
