from django_admin_inline_paginator.admin import TabularInlinePaginated
from django.contrib import admin
from seller import models as sellerModel
from user import models as userModel
from django.db import models
from django.forms import TextInput, Textarea
from django.contrib.auth.admin import UserAdmin
from django.conf import settings
from user import forms


@admin.register(sellerModel.Warehouse)
class WarehouseAdmin(admin.ModelAdmin):
    list_display = ('name', 'province', 'city', 'seller')
    search_fields = ('name', 'city__name', 'seller__username', 'seller__first_name', 'seller__last_name')
    list_filter = ('province',)
    list_per_page = settings.LIST_PER_PAGE

    class Media:
        js = ("user/address_city.js",)


class InlineAddress(admin.StackedInline):
    model = userModel.Address
    extra = 0
    formfield_overrides = {
        models.CharField: {'widget': TextInput(attrs={'size': '40'})},
        models.TextField: {'widget': Textarea(attrs={'rows': 4, 'cols': 60})},
        # models.FloatField: {'widget': TextInput(attrs={'size': '12'})},
    }
    form = forms.AddressForm

    class Media:
        js = ("user/address_city.js",)


class InlineWarehouse(admin.StackedInline):
    model = sellerModel.Warehouse
    extra = 0
    formfield_overrides = {
        models.CharField: {'widget': TextInput(attrs={'size': '40'})},
        models.TextField: {'widget': Textarea(attrs={'rows': 4, 'cols': 60})},
    }
    form = forms.AddressForm

    class Media:
        js = ("user/address_city.js",)


class InlineSellerDocuments(admin.StackedInline):
    model = sellerModel.Documents
    extra = 0


class InlineCompany(admin.StackedInline):
    model = sellerModel.Company
    extra = 0


@admin.register(sellerModel.Seller)
class SellerAdmin(admin.ModelAdmin):
    list_display = ('shop_name', 'first_name', 'last_name', 'logo_tag')
    search_fields = ('first_name', 'last_name', 'shop_name')
    list_filter = ('account_type',)
    exclude = ('password',)
    filter_horizontal = ('car', 'product')
    list_per_page = settings.LIST_PER_PAGE
    superAdmin_fieldsets = (
        ('اطلاعات شخصی', {'fields': ('first_name', 'last_name', 'mobile', 'email', 'username', 'gender',
                                     'phone', 'account_type', 'logo', 'nationality_code', 'identifier',
                                     'birthdate', 'shop_name', 'about', 'bank_account_id', 'wallet', 'car', 'product')}),
        ('مجوز ها', {'fields': ('is_active',)}),
    )
    staff_fieldsets = (
        ('اطلاعات شخصی', {'fields': ('first_name', 'last_name', 'mobile', 'email', 'username', 'gender',
                                     'subscription_date')}),
    )

    def change_view(self, request, *args, **kwargs):
        if not request.user.is_superuser:
            try:
                self.fieldsets = self.staff_fieldsets
                response = super(SellerAdmin, self).change_view(request, *args, **kwargs)
            finally:
                self.fieldsets = UserAdmin.fieldsets
            return response
        else:
            try:
                self.fieldsets = self.superAdmin_fieldsets
                response = super(SellerAdmin, self).change_view(request, *args, **kwargs)
            finally:
                self.fieldsets = UserAdmin.fieldsets
            return response

    inlines = [InlineCompany, InlineSellerDocuments, InlineAddress, InlineWarehouse]
    readonly_fields = ['password', 'last_login', 'is_superuser', 'is_staff', 'email', 'date_joined',
                       'first_name', 'last_name', 'username', 'mobile', 'gender', 'logo', 'is_active']

    def get_readonly_fields(self, request, obj=None):
        if request.user.is_superuser:
            return []
        return self.readonly_fields


