from django.contrib import admin
from django.utils.html import format_html
from .models import MainCategory, Category, Product, ProductImage, Cart, CartItem, ShopSettings

# ============================================
# تنظیمات فروشگاه (برای مدیریت هزینه ارسال)
# ============================================
@admin.register(ShopSettings)
class ShopSettingsAdmin(admin.ModelAdmin):
    list_display = ('shipping_cost', 'free_shipping_threshold', 'updated_at')
    fieldsets = (
        ('💰 تنظیمات ارسال', {
            'fields': ('shipping_cost', 'free_shipping_threshold'),
            'description': 'هزینه ارسال به مبلغ کل سفارش اضافه می‌شود. اگر مبلغ سفارش از حداقل تعیین شده بیشتر باشد، ارسال رایگان است.'
        }),
    )
    
    def has_add_permission(self, request):
        # فقط یک رکورد می‌تواند وجود داشته باشد
        if ShopSettings.objects.exists():
            return False
        return True
    
    def has_delete_permission(self, request, obj=None):
        return False
    
    def save_model(self, request, obj, form, change):
        if not obj.pk and ShopSettings.objects.exists():
            return
        super().save_model(request, obj, form, change)

# ============================================
# دسته‌بندی اصلی
# ============================================
@admin.register(MainCategory)
class MainCategoryAdmin(admin.ModelAdmin):
    list_display = ['name', 'order', 'is_active', 'image_preview']
    list_editable = ['order', 'is_active']
    
    def image_preview(self, obj):
        if obj.image:
            return format_html('<img src="{}" width="50" height="50" style="border-radius:5px; object-fit:cover;">', obj.image.url)
        return "-"
    image_preview.short_description = "تصویر"

# ============================================
# زیردسته
# ============================================
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ['name', 'main_category']
    list_filter = ['main_category']
    search_fields = ['name']

# ============================================
# محصولات
# ============================================
class ProductImageInline(admin.TabularInline):
    model = ProductImage
    extra = 3
    fields = ['image', 'caption', 'order']
    ordering = ['order']

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ['name', 'price', 'main_category', 'category', 'image_preview']
    list_filter = ['main_category', 'category']
    search_fields = ['name', 'description']
    inlines = [ProductImageInline]
    
    def image_preview(self, obj):
        if obj.main_image:
            return format_html('<img src="{}" width="50" height="50" style="border-radius:5px; object-fit:cover;">', obj.main_image.url)
        return "-"
    image_preview.short_description = "تصویر اصلی"

# ============================================
# سبد خرید
# ============================================
@admin.register(Cart)
class CartAdmin(admin.ModelAdmin):
    list_display = ['id', 'user', 'created_at']
    list_filter = ['created_at']
    search_fields = ['user__username', 'user__phone']

@admin.register(CartItem)
class CartItemAdmin(admin.ModelAdmin):
    list_display = ['id', 'cart', 'product', 'quantity', 'added_at']
    list_filter = ['cart']
    search_fields = ['product__name']

# ============================================
# تصاویر محصولات
# ============================================
@admin.register(ProductImage)
class ProductImageAdmin(admin.ModelAdmin):
    list_display = ['product', 'image_preview', 'order']
    list_filter = ['product']
    ordering = ['order']
    
    def image_preview(self, obj):
        if obj.image:
            return format_html('<img src="{}" width="50" height="50" style="border-radius:5px; object-fit:cover;">', obj.image.url)
        return "-"
    image_preview.short_description = "تصویر"