# shop/admin.py

from django.contrib import admin
from .models import Category, Product, ProductImage, Order, OrderItem


class ProductImageInline(admin.TabularInline):
    model = ProductImage
    extra = 2
    fields = ['image', 'is_thumbnail']


@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ['name', 'slug']
    prepopulated_fields = {'slug': ('name',)}


@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ['name', 'category', 'price', 'stock', 'available', 'updated']
    list_filter = ['available', 'category', 'created', 'updated']
    list_editable = ['price', 'stock', 'available']
    prepopulated_fields = {'slug': ('name',)}
    search_fields = ['name', 'description']
    inlines = [ProductImageInline]
    fieldsets = (
        ('Product Info', {
            'fields': ('category', 'name', 'slug', 'description', 'image')
        }),
        ('Pricing & Stock', {
            'fields': ('price', 'stock', 'available')
        }),
    )


@admin.register(ProductImage)
class ProductImageAdmin(admin.ModelAdmin):
    list_display = ['product', 'image', 'is_thumbnail']
    list_filter = ['is_thumbnail']
    list_editable = ['is_thumbnail']


# ─── ORDERS ───────────────────────────────────────────────────────────────────

class OrderItemInline(admin.TabularInline):
    model = OrderItem
    extra = 0
    readonly_fields = ['product', 'product_name', 'price', 'quantity', 'total_price']
    fields = ['product_name', 'quantity', 'price', 'total_price']

    def total_price(self, obj):
        return f"KES {obj.total_price}"
    total_price.short_description = 'Total'


@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    list_display  = ['id', 'first_name', 'last_name', 'email', 'phone',
                     'total_price', 'status', 'created']
    list_filter   = ['status', 'created']
    list_editable = ['status']
    search_fields = ['first_name', 'last_name', 'email', 'phone', 'ipay_txn_id']
    readonly_fields = ['user', 'total_price', 'ipay_txn_id', 'created', 'updated']
    inlines = [OrderItemInline]
    fieldsets = (
        ('Customer', {
            'fields': ('user', 'first_name', 'last_name', 'email', 'phone')
        }),
        ('Delivery', {
            'fields': ('address', 'city')
        }),
        ('Payment', {
            'fields': ('total_price', 'status', 'ipay_txn_id')
        }),
        ('Timestamps', {
            'fields': ('created', 'updated'),
            'classes': ('collapse',),
        }),
    )
