from django.contrib import admin
from django.utils.html import format_html
from .models import EmailLog


@admin.register(EmailLog)
class EmailLogAdmin(admin.ModelAdmin):
    list_display  = ['created_at', 'status_badge', 'recipient', 'subject', 'template', 'attempts', 'short_error']
    list_filter   = ['status', 'template']
    search_fields = ['recipient', 'subject', 'error_msg']
    readonly_fields = ['recipient', 'subject', 'template', 'status', 'attempts', 'error_msg', 'created_at']
    date_hierarchy  = 'created_at'

    # No add/delete in admin — logs are auto-created by the email engine
    def has_add_permission(self, request):
        return False

    def has_delete_permission(self, request, obj=None):
        return request.user.is_superuser  # only superuser can wipe logs

    def status_badge(self, obj):
        colours = {
            'sent':    ('#22c55e', '#f0fdf4'),
            'retried': ('#f59e0b', '#fffbeb'),
            'failed':  ('#ef4444', '#fef2f2'),
        }
        fg, bg = colours.get(obj.status, ('#888', '#f5f5f5'))
        return format_html(
            '<span style="background:{};color:{};padding:3px 10px;border-radius:12px;'
            'font-size:.75rem;font-weight:700;">{}</span>',
            bg, fg, obj.get_status_display()
        )
    status_badge.short_description = 'Status'

    def short_error(self, obj):
        if obj.error_msg:
            return format_html(
                '<span style="color:#ef4444;font-size:.8rem;" title="{}">{}</span>',
                obj.error_msg,
                obj.error_msg[:60] + ('…' if len(obj.error_msg) > 60 else ''),
            )
        return '—'
    short_error.short_description = 'Error'
