from django.contrib import admin
from .models import Vendor, VendorProduct, ProductImage, VendorSubscription


@admin.register(VendorSubscription)
class VendorSubscriptionAdmin(admin.ModelAdmin):
    list_display = [
        "vendor", "status", "amount_paid", "currency",
        "activated_at", "expires_at", "days_remaining", "created_at",
    ]
    list_filter = ["status", "currency"]
    search_fields = ["vendor__store_name", "paystack_reference"]
    readonly_fields = ["created_at", "updated_at", "days_remaining"]
    ordering = ["-created_at"]

    def days_remaining(self, obj):
        d = obj.days_remaining
        if d is None:
            return "—"
        if d == 0:
            return "Expired"
        return f"{d} days"
    days_remaining.short_description = "Days Left"


@admin.register(Vendor)
class VendorAdmin(admin.ModelAdmin):
    list_display = [
        "store_name", "store_slug", "user", "is_approved",
        "subscription_status", "subscription_expires", "created_at",
    ]
    list_filter = ["is_approved"]
    search_fields = ["store_name", "store_slug", "user__username"]
    readonly_fields = ["created_at", "updated_at"]

    def subscription_status(self, obj):
        try:
            return obj.subscription.get_status_display()
        except Exception:
            return "—"
    subscription_status.short_description = "Sub Status"

    def subscription_expires(self, obj):
        try:
            expires = obj.subscription.expires_at
            if expires:
                return expires.strftime("%b %d, %Y")
            return "—"
        except Exception:
            return "—"
    subscription_expires.short_description = "Expires"


class ProductImageInline(admin.TabularInline):
    model = ProductImage
    extra = 1
    readonly_fields = ["created_at"]
    fields = ["image", "alt_text", "position", "created_at"]


@admin.register(VendorProduct)
class VendorProductAdmin(admin.ModelAdmin):
    list_display = ["name", "vendor", "price", "currency", "category", "in_stock", "created_at"]
    list_filter = ["in_stock", "vendor", "category"]
    search_fields = ["name", "brand", "category"]
    readonly_fields = ["created_at", "updated_at"]
    inlines = [ProductImageInline]