
from django.contrib import admin
from .models import ExpenseCategory, BudgetAllocation, Expense, ExpenseAttachment, ExpenseApprovalLog

@admin.register(ExpenseCategory)
class ExpenseCategoryAdmin(admin.ModelAdmin):
    list_display = ['name', 'is_active', 'created_at']
    list_filter = ['is_active', 'created_at']
    search_fields = ['name', 'description']
    ordering = ['name']

class ExpenseAttachmentInline(admin.TabularInline):
    model = ExpenseAttachment
    extra = 0
    readonly_fields = ['file_size', 'uploaded_at']

class ExpenseApprovalLogInline(admin.TabularInline):
    model = ExpenseApprovalLog
    extra = 0
    readonly_fields = ['timestamp']

@admin.register(BudgetAllocation)
class BudgetAllocationAdmin(admin.ModelAdmin):
    list_display = ['employee', 'category', 'allocated_amount', 'spent_amount', 'remaining_amount', 'allocation_period', 'is_active']
    list_filter = ['allocation_period', 'is_active', 'category', 'start_date']
    search_fields = ['employee__first_name', 'employee__last_name', 'category__name']
    readonly_fields = ['spent_amount']
    ordering = ['-created_at']

@admin.register(Expense)
class ExpenseAdmin(admin.ModelAdmin):
    list_display = ['expense_number', 'employee', 'category', 'title', 'amount', 'status', 'expense_date']
    list_filter = ['status', 'category', 'expense_date', 'is_reimbursable']
    search_fields = ['expense_number', 'title', 'description', 'employee__first_name', 'employee__last_name']
    readonly_fields = ['expense_number', 'submitted_at', 'approved_at', 'rejected_at', 'paid_at']
    inlines = [ExpenseAttachmentInline, ExpenseApprovalLogInline]
    ordering = ['-submitted_at']
    
    fieldsets = (
        ('Basic Information', {
            'fields': ('expense_number', 'employee', 'category', 'budget_allocation')
        }),
        ('Expense Details', {
            'fields': ('title', 'description', 'amount', 'expense_date', 'vendor_name', 'vendor_contact')
        }),
        ('Status & Approval', {
            'fields': ('status', 'approved_by', 'approved_at', 'rejected_by', 'rejected_at', 'rejection_reason')
        }),
        ('Payment Information', {
            'fields': ('paid_at', 'payment_method', 'payment_reference', 'is_reimbursable')
        }),
        ('Additional Information', {
            'fields': ('notes', 'submitted_at')
        }),
    )

@admin.register(ExpenseAttachment)
class ExpenseAttachmentAdmin(admin.ModelAdmin):
    list_display = ['expense', 'title', 'attachment_type', 'file_size_formatted', 'uploaded_at']
    list_filter = ['attachment_type', 'uploaded_at']
    search_fields = ['expense__expense_number', 'title']
    readonly_fields = ['file_size', 'uploaded_at']

@admin.register(ExpenseApprovalLog)
class ExpenseApprovalLogAdmin(admin.ModelAdmin):
    list_display = ['expense', 'action', 'performed_by', 'timestamp']
    list_filter = ['action', 'timestamp']
    search_fields = ['expense__expense_number', 'performed_by__username']
    readonly_fields = ['timestamp']
