"""
Products API Views
快速产品查询接口，用于前端下拉框和自动完成
"""
from rest_framework import viewsets, status
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters

from flower.viewsets import LimitedGenericViewSet
from basic_info.models import Product


class ProductQuickViewSet(LimitedGenericViewSet):
    """
    产品快速查询接口
    
    专门为前端下拉框和自动完成提供的轻量级接口
    只返回 id, name 和 image，支持分页和模糊搜索
    
    性能优化：
    - 使用 .only() 只查询需要的字段，避免 SELECT *
    - 减少数据传输量
    - 提升查询速度
    """
    queryset = Product.objects.only('id', 'name', 'image')  # 性能优化：只查询需要的字段
    permission_classes = [IsAuthenticated]
    filter_backends = [DjangoFilterBackend, filters.SearchFilter]
    search_fields = ['name']
    
    def list(self, request, *args, **kwargs):
        """
        获取产品列表（仅 id, name 和 image）
        
        查询参数:
        - limit: 返回结果数量，默认无限制
        - offset: 偏移量，默认0
        - search: 按名称模糊搜索
        
        返回字段:
        - id: 产品ID
        - name: 产品名称
        - image: 产品图片URL（可能为null）
        
        示例:
        - GET /api/v1/products/quick/?limit=10&offset=0
        - GET /api/v1/products/quick/?search=布料
        """
        queryset = self.filter_queryset(self.get_queryset())
        
        # 分页
        page = self.paginate_queryset(queryset)
        if page is not None:
            data = [
                {
                    'id': p.id, 
                    'name': p.name,
                    'image': p.image.url if p.image else None
                } 
                for p in page
            ]
            return self.get_paginated_response(data)
        
        # 不分页（如果没有 limit 参数）
        data = [
            {
                'id': p.id, 
                'name': p.name,
                'image': p.image.url if p.image else None
            } 
            for p in queryset
        ]
        return Response({
            'count': len(data),
            'results': data
        })
