from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from django.shortcuts import get_object_or_404
from product.models import Product
from .cart import Cart
from .serializers import CartSerializer, CartAddProductSerializer

class CartDetailView(APIView):
    def get(self, request):
        cart = Cart(request)
        # Cart.__iter__ zaten dict döndürüyor, direkt listeye çevirebiliriz.
        cart_items = list(cart)
        
        data = {
            'items': cart_items,
            'total_price': cart.get_total_price()
        }
        
        serializer = CartSerializer(data)
        return Response(serializer.data)

class CartAddView(APIView):
    def post(self, request):
        serializer = CartAddProductSerializer(data=request.data)
        if serializer.is_valid():
            product_id = serializer.validated_data['product_id']
            quantity = serializer.validated_data['quantity']
            override_quantity = serializer.validated_data['override_quantity']
            
            product = get_object_or_404(Product, id=product_id)
            cart = Cart(request)
            cart.add(product=product, quantity=quantity, override_quantity=override_quantity)
            
            # Güncel sepeti döndür
            cart_items = list(cart)
            
            data = {
                'items': cart_items,
                'total_price': cart.get_total_price()
            }
            
            return Response(CartSerializer(data).data, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

class CartRemoveView(APIView):
    def delete(self, request, product_id):
        product = get_object_or_404(Product, id=product_id)
        cart = Cart(request)
        cart.remove(product)
        
        # Güncel sepeti döndür
        cart_items = list(cart)
        
        data = {
            'items': cart_items,
            'total_price': cart.get_total_price()
        }
        
        return Response(CartSerializer(data).data, status=status.HTTP_200_OK)

class CartClearView(APIView):
    def post(self, request):
        cart = Cart(request)
        cart.clear()
        return Response({'message': 'Cart cleared'}, status=status.HTTP_200_OK)
