from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from .models import Branch,Profile,Category,Product,Stock,StockHistory,PurchaseRequest,RequestItem,Notification,SystemLog,RuntimeSetting

class ProfileInline(admin.StackedInline):
    model=Profile
    can_delete=False
    fk_name='user'
    extra=0
    verbose_name='نقش سمشف'
    verbose_name_plural='دسترسی در سمشف (بعد از ایجاد کاربر تعیین شود)'

admin.site.unregister(User)
@admin.register(User)
class SamshafUserAdmin(UserAdmin):
    inlines=[ProfileInline]
    list_display=(*UserAdmin.list_display,'get_samshaf_role')
    @admin.display(description='نقش در سمشف')
    def get_samshaf_role(self,obj):
        try:return obj.samshaf_profile.get_role_display()
        except Profile.DoesNotExist:return '—'

@admin.register(Branch)
class BranchAdmin(admin.ModelAdmin):
    list_display=['name','active','is_workshop']
    list_filter=['active','is_workshop']
    search_fields=['name']

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display=['name','parent','supplier','order_note','active','position']
    list_editable=['active','position']
    search_fields=['name','supplier']
    list_filter=['active','parent']

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display=['name','category','unit','minimum','estimated_price','active']
    list_editable=['minimum','estimated_price','active']
    list_filter=['active','category']
    search_fields=['name','category__name']
    list_per_page=40

@admin.register(Stock)
class StockAdmin(admin.ModelAdmin):
    list_display=['branch','product','quantity','updated_at','updated_by']
    list_filter=['branch']
    search_fields=['product__name','branch__name']

@admin.register(StockHistory)
class StockHistoryAdmin(admin.ModelAdmin):
    list_display=['stock','old_qty','new_qty','actor','changed_at']
    readonly_fields=['stock','old_qty','new_qty','actor','changed_at']
    def has_add_permission(self,request):return False
    def has_change_permission(self,request,obj=None):return False

class RequestItemInline(admin.TabularInline):
    model=RequestItem
    extra=0
    fields=['product','quantity','approved_qty','received_qty','price_snapshot','unit_snapshot']
    readonly_fields=fields
    def has_add_permission(self,request,obj=None):return False
    def has_delete_permission(self,request,obj=None):return False

@admin.register(PurchaseRequest)
class PurchaseRequestAdmin(admin.ModelAdmin):
    list_display=['id','branch','category','status','created_at','requested_by']
    list_filter=['status','branch','category']
    readonly_fields=['branch','category','requested_by','note','status','created_at','updated_at']
    inlines=[RequestItemInline]
    def has_add_permission(self,request):return False
    def has_delete_permission(self,request,obj=None):return False
    def has_change_permission(self,request,obj=None):return request.user.is_superuser
    def save_model(self,request,obj,form,change):
        # سفارش تنها از مسیرهای عملیاتی سامانه تغییر داده می‌شود.
        if change:return
        super().save_model(request,obj,form,change)

@admin.register(Notification)
class NotificationAdmin(admin.ModelAdmin):
    list_display=['title','recipient','is_read','created_at']
    list_filter=['is_read']
    readonly_fields=['recipient','title','message','url','is_read','created_at']
    def has_add_permission(self,request):return False

@admin.register(SystemLog)
class SystemLogAdmin(admin.ModelAdmin):
    list_display=['created_at','level','event','actor','message','path']
    list_filter=['level','event','created_at']
    search_fields=['event','message','path']
    readonly_fields=['created_at','level','event','message','actor','path']
    list_per_page=30
    def has_add_permission(self,request):return False
    def has_change_permission(self,request,obj=None):return False
    def has_delete_permission(self,request,obj=None):return False

@admin.register(RuntimeSetting)
class RuntimeSettingAdmin(admin.ModelAdmin):
    list_display=['key','value']
    def has_add_permission(self,request):return False
