from django.contrib import admin
from .models import PurchaseOrder, FundingDisbursement

@admin.register(PurchaseOrder)
class PurchaseOrderAdmin(admin.ModelAdmin):
    list_display = ['po_number', 'supplier_name', 'total_amount', 'funded_amount', 'status', 'order_date']
    list_filter = ['status', 'order_date', 'delivery_date']
    search_fields = ['po_number', 'supplier_name']
    readonly_fields = ['id', 'created_at', 'updated_at', 'remaining_amount']
    
    fieldsets = (
        ('Purchase Order Details', {
            'fields': ('credit_application', 'po_number', 'supplier_name', 'supplier_contact', 
                      'order_date', 'delivery_date', 'total_amount')
        }),
        ('Funding Details', {
            'fields': ('funded_amount', 'remaining_amount', 'interest_rate')
        }),
        ('Status', {
            'fields': ('status', 'notes')
        }),
        ('Documents', {
            'fields': ('po_document', 'invoice_document')
        }),
    )
    
    actions = ['verify_po', 'process_funding']
    
    def verify_po(self, request, queryset):
        queryset.update(status='VERIFIED')
        self.message_user(request, f"Verified {queryset.count()} purchase orders")
    verify_po.short_description = "Verify selected purchase orders"
    
    def process_funding(self, request, queryset):
        for po in queryset:
            if po.status == 'VERIFIED' and po.funded_amount == 0:
                funding_amount = po.calculate_funding()
                po.funded_amount = funding_amount
                po.status = 'SUPPLIER_ORDERED'
                po.save()
                
                # Create disbursement record
                FundingDisbursement.objects.create(
                    purchase_order=po,
                    amount=funding_amount,
                    transaction_reference=f"DISB-{po.po_number}"
                )
        self.message_user(request, f"Processed funding for {queryset.count()} purchase orders")
    process_funding.short_description = "Process funding for selected POs"

@admin.register(FundingDisbursement)
class FundingDisbursementAdmin(admin.ModelAdmin):
    list_display = ['purchase_order', 'amount', 'disbursement_date', 'transaction_reference', 'paid_to_supplier']
    list_filter = ['paid_to_supplier', 'disbursement_date']
    search_fields = ['transaction_reference', 'purchase_order__po_number']