# Django imports
from django.contrib.admin import SimpleListFilter

# Local imports
from .models import ObjItem

class GeoKupDistanceFilter(SimpleListFilter):
    title = 'Расстояние между гео и кубсатом'
    parameter_name = 'distance_geo_kup'

    def lookups(self, request, model_admin):
        return (
            ('small', 'Меньше 100 км'),
            ('medium', '100-500 км'), 
            ('large', 'Больше 500 км'),
        )

    def queryset(self, request, queryset):
        if self.value() == 'small':
            return queryset.filter(distance_coords_kup__lt=100)
        if self.value() == 'medium':
            return queryset.filter(distance_coords_kup__gte=100, distance_coords_kup__lte=500)
        if self.value() == 'large':
            return queryset.filter(distance_coords_kup__gt=500)


class GeoValidDistanceFilter(SimpleListFilter):
    title = 'Расстояние между гео и оперативным отделом'
    parameter_name = 'distance_geo_valid'

    def lookups(self, request, model_admin):
        return (
            ('small', 'Меньше 100 км'),
            ('medium', '100-500 км'), 
            ('large', 'Больше 500 км'),
        )

    def queryset(self, request, queryset):
        if self.value() == 'small':
            return queryset.filter(distance_coords_valid__lt=100)
        if self.value() == 'medium':
            return queryset.filter(distance_coords_valid__gte=100, distance_coords_valid__lte=500)
        if self.value() == 'large':
            return queryset.filter(distance_coords_valid__gt=500)
        
class UniqueToggleFilter(SimpleListFilter):
    title = 'Уникальность по имени'
    parameter_name = 'name'

    def lookups(self, request, model_admin):
        return (
            ('unique', 'Только уникальные'),
            ('all', 'Все'),
        )

    def queryset(self, request, queryset):
        if self.value() == 'unique':
            return queryset.order_by('name').distinct('name')
        return queryset
    
class HasSigmaParameterFilter(SimpleListFilter):
    title = 'ВЧ sigma'
    parameter_name = 'has_sigma'

    def lookups(self, request, model_admin):
        return (
            ('yes', 'Заполнено'),
            ('no', 'Пусто'),
        )

    def queryset(self, request, queryset):
        if self.value() == 'yes':
            return queryset.filter(sigma_parameter__isnull=False)
        if self.value() == 'no':
            return queryset.filter(sigma_parameter__isnull=True)
        return queryset