from django.contrib import admin

from .models import (
    VerificationActivityLog,
    VerificationClaim,
    VerificationDescriptionOption,
    VerificationInvoice,
    VerificationInvoiceDocument,
)


class VerificationInvoiceInline(admin.TabularInline):
    model = VerificationInvoice
    extra = 0


@admin.register(VerificationClaim)
class VerificationClaimAdmin(admin.ModelAdmin):
    list_display = (
        "claim_reference_number",
        "date_received",
        "applicant_name_english",
        "current_status",
        "created_by",
        "updated_at",
    )
    list_filter = ("date_received", "created_at", "updated_at")
    search_fields = ("claim_reference_number", "applicant_name_arabic", "applicant_name_english")
    readonly_fields = ("created_at", "updated_at", "created_by", "updated_by")
    inlines = [VerificationInvoiceInline]


@admin.register(VerificationInvoice)
class VerificationInvoiceAdmin(admin.ModelAdmin):
    list_display = (
        "claim",
        "transaction_number",
        "transaction_date",
        "supplier_name",
        "plot_number",
        "tos",
        "total_amount_paid",
        "vat_amount",
        "vat_approved",
        "vat_paid",
    )
    list_filter = ("transaction_date", "created_at")
    search_fields = ("claim__claim_reference_number", "supplier_name", "supplier_trn", "transaction_number")
    readonly_fields = ("vat_amount", "created_at", "updated_at")


@admin.register(VerificationActivityLog)
class VerificationActivityLogAdmin(admin.ModelAdmin):
    list_display = ("claim", "action", "actor", "invoice", "created_at")
    list_filter = ("action", "created_at")
    search_fields = ("claim__claim_reference_number", "message", "actor__username")
    readonly_fields = ("claim", "invoice", "actor", "action", "message", "created_at")


@admin.register(VerificationInvoiceDocument)
class VerificationInvoiceDocumentAdmin(admin.ModelAdmin):
    list_display = ("invoice", "category", "original_name", "uploaded_by", "created_at")
    list_filter = ("category", "created_at")
    search_fields = (
        "invoice__claim__claim_reference_number",
        "invoice__transaction_number",
        "original_name",
        "uploaded_by__email",
    )
    readonly_fields = ("created_at", "updated_at", "original_name", "uploaded_by")


@admin.register(VerificationDescriptionOption)
class VerificationDescriptionOptionAdmin(admin.ModelAdmin):
    list_display = ("label", "is_active", "sort_order", "updated_at")
    list_filter = ("is_active",)
    search_fields = ("label",)
