from rest_framework import serializers
from product.models import Product
from product.serializers import ProductSerializer

# CartItemSerializer artık hem dict (session) hem de model instance (db) ile çalışabilmeli.
# Serializer'lar varsayılan olarak object attribute'larına erişir.
# Dict erişimi için source kullanabiliriz veya to_representation override edebiliriz.
# Ancak en temizi, view tarafında veriyi standart bir yapıya (list of dicts) dönüştürüp serializer'a vermektir.
# Cart sınıfındaki __iter__ metodu zaten bunu yapıyor (hem DB hem Session için dict döndürüyor).
# Bu yüzden mevcut serializer yapısını koruyabiliriz.

class CartItemSerializer(serializers.Serializer):
    product = ProductSerializer(read_only=True)
    quantity = serializers.IntegerField()
    price = serializers.DecimalField(max_digits=10, decimal_places=2)
    total_price = serializers.DecimalField(max_digits=10, decimal_places=2)

class CartSerializer(serializers.Serializer):
    items = CartItemSerializer(many=True, read_only=True)
    total_price = serializers.DecimalField(max_digits=10, decimal_places=2)

class CartAddProductSerializer(serializers.Serializer):
    product_id = serializers.IntegerField()
    quantity = serializers.IntegerField(min_value=0, default=1)
    override_quantity = serializers.BooleanField(required=False, default=False)
