from django.contrib.admin import SimpleListFilter
from django.forms import TextInput
from django.utils import timezone
from . import models as saleModel
from django.conf import settings
from django.contrib import admin
from django.db import models


class InlineOrderDetails(admin.StackedInline):
    model = saleModel.OrderDetails
    fields = ('inquiry', 'product_count', 'product_originality', 'price', 'off', 'suggested',
              'seller_shop', 'jalali_delivery_time', 'seller_address', 'seller_mobile', 'seller_phone', 'cleared')
    readonly_fields = ('product_count', 'product_originality', 'seller_shop', 'delivery_time', 'jalali_delivery_time',
                       'seller_address', 'seller_mobile', 'seller_phone')
    extra = 0
    formfield_overrides = {
        models.CharField: {'widget': TextInput(attrs={'size': '20'})},
        models.IntegerField: {'widget': TextInput(attrs={'size': '20'})},
    }


@admin.register(saleModel.Orders)
class OrderAdmin(admin.ModelAdmin):
    list_display = ('jalali_created', 'user', 'status')
    search_fields = ('user__first_name', 'user__last_name', 'user__username')
    list_filter = ('status',)
    list_per_page = settings.LIST_PER_PAGE
    inlines = [InlineOrderDetails]


@admin.register(saleModel.SuggestedPrices)
class SuggestedPricesAdmin(admin.ModelAdmin):
    list_display = ('inquiry', 'total_price', 'jalali_delivery_time', 'seller', 'jalali_created')
    search_fields = ('id', 'seller__name', 'seller__shop_name', 'inquiry__product__name',
                     'inquiry__inquiry_box__car__name')
    list_filter = ('inquiry__inquiry_box__created', 'status', 'accepted', 'inquiry__inquiry_box__car__brand',
                   'inquiry__product__subcategory__category')
    list_per_page = settings.LIST_PER_PAGE


class BaseExpiredFilter(SimpleListFilter):
    title = 'اعتبار'
    parameter_name = 'expired'

    def lookups(self, request, model_admin):
        return [(True, 'معتبر'), (False, 'منقضی شده')]

    def queryset(self, request, queryset):
        if self.value():
            if self.value() == "True":
                return queryset.filter(expired__gte=timezone.now())
            else:
                return queryset.filter(expired__lt=timezone.now())
        return queryset


@admin.register(saleModel.PriceBasis)
class PriceBasisAdmin(admin.ModelAdmin):
    list_display = ('suggested_inquiry', 'suggested_total_price', 'suggested_seller', 'stock', 'jalali_created',
                    'is_active')
    search_fields = ('suggested__seller__mobile', 'suggested__seller__id')
    list_filter = ('created', BaseExpiredFilter)
    list_per_page = settings.LIST_PER_PAGE


class InlineInquiries(admin.StackedInline):
    model = saleModel.Inquiry
    extra = 0
    per_page = settings.LIST_PER_PAGE
    formfield_overrides = {
        models.CharField: {'widget': TextInput(attrs={'size': '20'})},
        models.IntegerField: {'widget': TextInput(attrs={'size': '20'})},
    }


@admin.register(saleModel.InquiryBox)
class InquiryBoxAdmin(admin.ModelAdmin):
    list_display = ('car', 'customer', 'jalali_created')
    search_fields = ('customer__username', 'car__name')
    list_filter = ('temp', 'created', 'car__brand')
    list_per_page = settings.LIST_PER_PAGE
    inlines = [InlineInquiries]
