from django.contrib import admin
from django.utils.html import format_html
from .models import AuctionListing
from .page_generator import generate_auction_page


@admin.register(AuctionListing)
class AuctionListingAdmin(admin.ModelAdmin):
    list_display = ['name', 'asset_type', 'is_premium', 'status', 'display_price_col', 'page_status', 'created_at']
    list_filter = ['asset_type', 'status', 'is_premium']
    search_fields = ['name', 'tagline']
    list_editable = ['is_premium', 'status']
    prepopulated_fields = {'slug': ('name',)}
    actions = ['generate_pages']
    fieldsets = (
        ('Listing', {'fields': ('asset_type', 'name', 'slug', 'is_premium', 'tagline', 'description')}),
        ('Pricing', {'fields': ('price_on_request', 'asking_price')}),
        ('Status', {'fields': ('status',)}),
        ('Generated Page', {'fields': ('generate_page', 'page_path', 'page_generated_at', 'meta_description')}),
    )
    readonly_fields = ['page_path', 'page_generated_at']

    def display_price_col(self, obj):
        return obj.display_price
    display_price_col.short_description = 'Price'

    def page_status(self, obj):
        if obj.page_generated_at:
            return format_html('<span style="color:green">&#10003; Generated</span>')
        return format_html('<span style="color:orange">Not generated</span>')
    page_status.short_description = 'Page'

    def generate_pages(self, request, queryset):
        count = 0
        for listing in queryset:
            if listing.generate_page:
                generate_auction_page(listing)
                count += 1
        self.message_user(request, f'{count} page(s) generated successfully.')
    generate_pages.short_description = 'Generate static HTML pages'
