from rest_framework import viewsets, status
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.filters import SearchFilter, OrderingFilter
from django_filters.rest_framework import DjangoFilterBackend

from apps.car_stock.models import CarStock, CarImage
from apps.car_stock.serializers import CarStockSerializer, CarImageSerializer
from utils.paginations import LimitOffsetPagination


class CarStockViewSet(viewsets.ModelViewSet):
    serializer_class = CarStockSerializer
    permission_classes = [IsAuthenticated]
    pagination_class = LimitOffsetPagination
    filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
    search_fields = [
        'vin',
        'stock_number',
        'make',
        'model',
        'year',
        'color',
    ]
    ordering_fields = [
        'price',
        'mileage',
        'year',
        'created_at',
    ]

    def get_queryset(self):
        return (
            CarStock.objects
            .filter(is_active=True)
            .prefetch_related("images")
        )

    def perform_destroy(self, instance):
        """
        Soft delete instead of real delete (enterprise safe).
        """
        instance.is_active = False
        instance.save()

    @action(detail=True, methods=["post"], url_path="images")
    def upload_image(self, request, pk=None):
        """
        POST /api/car-stock/{id}/images/
        Upload a new image for a car.
        """
        car = self.get_object()
        serializer = CarImageSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(car=car)
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

class CarImageViewSet(viewsets.ModelViewSet):
    """
    DELETE /api/car-stock/images/{id}/
    """
    queryset = CarImage.objects.all()
    serializer_class = CarImageSerializer
    permission_classes = [IsAuthenticated]
