from django.contrib import admin

from apps.rims.finance.models import (
    Budget,
    BudgetLine,
    DisbursementRequest,
    Expenditure,
    FundingSource,
    PaymentBatch,
    PaymentBatchItem,
    PaymentSchedule,
)


class BudgetLineInline(admin.TabularInline):
    model = BudgetLine
    extra = 0
    # PRD §5.4 FRFM005 — surface line-level funding source in admin too.
    fields = ("label", "category", "amount", "funding_source", "allocation_year", "account_code")


@admin.register(FundingSource)
class FundingSourceAdmin(admin.ModelAdmin):
    list_display = ("name", "code", "partner")
    search_fields = ("name", "code")


@admin.register(Budget)
class BudgetAdmin(admin.ModelAdmin):
    list_display = ("name", "award", "fiscal_year", "funding_source")
    inlines = [BudgetLineInline]


class PaymentBatchItemInline(admin.TabularInline):
    model = PaymentBatchItem
    extra = 0
    fields = ("sequence", "request", "amount")
    readonly_fields = ("request", "amount")


@admin.register(PaymentBatch)
class PaymentBatchAdmin(admin.ModelAdmin):
    list_display = ("batch_reference", "status", "currency", "scheduled_for", "created_at")
    list_filter = ("status", "payment_method")
    search_fields = ("batch_reference",)
    inlines = [PaymentBatchItemInline]
    readonly_fields = (
        "locked_at",
        "locked_by",
        "executed_at",
        "executed_by",
        "cancelled_at",
        "created_at",
        "updated_at",
    )


@admin.register(Expenditure)
class ExpenditureAdmin(admin.ModelAdmin):
    list_display = ("budget_line", "amount", "incurred_on")


@admin.register(DisbursementRequest)
class DisbursementRequestAdmin(admin.ModelAdmin):
    list_display = ("budget", "amount", "status", "created_at")
    list_filter = ("status",)


@admin.register(PaymentSchedule)
class PaymentScheduleAdmin(admin.ModelAdmin):
    list_display = ("budget", "due_on", "amount", "paid")
