import django_filters
from django.db import models

from api.producers_api.orders.models import Order

class OrderFilter(django_filters.FilterSet):
    # Date range filters
    created_after = django_filters.DateTimeFilter(field_name='created', lookup_expr='gte')
    created_before = django_filters.DateTimeFilter(field_name='created', lookup_expr='lte')
    
    # Price range filters
    min_total = django_filters.NumberFilter(field_name='final_total', lookup_expr='gte')
    max_total = django_filters.NumberFilter(field_name='final_total', lookup_expr='lte')
    
    # Status filter (multiple choice)
    status = django_filters.MultipleChoiceFilter(choices=Order.STATUS)
    
    # Customer filter
    customer = django_filters.NumberFilter(field_name='customer__id')
    
    # Coupon filters
    has_coupon = django_filters.BooleanFilter(method='filter_has_coupon')
    coupon_code = django_filters.CharFilter(field_name='coupon__code', lookup_expr='iexact')
    
    # Shipping method filter
    shipping_method = django_filters.NumberFilter(field_name='shipping_method__id')
    
    class Meta:
        model = Order
        fields = []
    
    def filter_has_coupon(self, queryset, name, value):
        if value:
            return queryset.exclude(coupon__isnull=True)
        return queryset.filter(coupon__isnull=True)