from django.contrib import admin
from .models import (
    SystemSettings, Payment, VendorSubscription, VerificationRequest,
    MpesaLinkingRequest, VendorMpesaCredentials, MpesaPayment
)


@admin.register(SystemSettings)
class SystemSettingsAdmin(admin.ModelAdmin):
    list_display = ['key', 'value', 'updated_at', 'updated_by']
    search_fields = ['key', 'value']
    list_filter = ['updated_at']


@admin.register(Payment)
class PaymentAdmin(admin.ModelAdmin):
    list_display = ['user', 'payment_type', 'amount', 'status', 'created_at']
    list_filter = ['payment_type', 'status', 'created_at']
    search_fields = ['user__email', 'reference']
    date_hierarchy = 'created_at'


@admin.register(VendorSubscription)
class VendorSubscriptionAdmin(admin.ModelAdmin):
    list_display = ['vendor', 'plan_type', 'is_active', 'started_at', 'expires_at']
    list_filter = ['plan_type', 'is_active']
    search_fields = ['vendor__shop_name']


@admin.register(VerificationRequest)
class VerificationRequestAdmin(admin.ModelAdmin):
    list_display = ['vendor', 'business_name', 'status', 'created_at']
    list_filter = ['status', 'created_at']
    search_fields = ['vendor__shop_name', 'business_name']


@admin.register(MpesaLinkingRequest)
class MpesaLinkingRequestAdmin(admin.ModelAdmin):
    list_display = ['vendor', 'account_type', 'business_short_code', 'status', 'created_at', 'reviewed_by']
    list_filter = ['status', 'account_type', 'created_at']
    search_fields = ['vendor__shop_name', 'business_short_code']
    readonly_fields = ['created_at', 'updated_at', 'reviewed_at']

    fieldsets = (
        ('Vendor Info', {
            'fields': ('vendor', 'account_type', 'business_short_code')
        }),
        ('Status', {
            'fields': ('status', 'rejection_reason', 'reviewed_by', 'reviewed_at')
        }),
        ('Timestamps', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )


@admin.register(VendorMpesaCredentials)
class VendorMpesaCredentialsAdmin(admin.ModelAdmin):
    list_display = ['vendor', 'account_type', 'business_short_code', 'is_active', 'created_at']
    list_filter = ['is_active', 'account_type', 'created_at']
    search_fields = ['vendor__shop_name', 'business_short_code']
    readonly_fields = ['created_at', 'updated_at']

    fieldsets = (
        ('Vendor Info', {
            'fields': ('vendor', 'linking_request')
        }),
        ('M-Pesa Details', {
            'fields': ('account_type', 'business_short_code', 'is_active')
        }),
        ('Timestamps', {
            'fields': ('created_at', 'updated_at'),
            'classes': ('collapse',)
        }),
    )


@admin.register(MpesaPayment)
class MpesaPaymentAdmin(admin.ModelAdmin):
    list_display = ['id', 'vendor', 'buyer', 'product', 'amount', 'status', 'created_at']
    list_filter = ['status', 'created_at']
    search_fields = ['vendor__shop_name', 'buyer__email', 'phone_number', 'mpesa_receipt_number']
    readonly_fields = ['created_at', 'updated_at', 'completed_at', 'callback_data']
    date_hierarchy = 'created_at'

    fieldsets = (
        ('Transaction Info', {
            'fields': ('vendor', 'product', 'buyer', 'amount', 'phone_number')
        }),
        ('M-Pesa Details', {
            'fields': ('account_reference', 'transaction_desc', 'merchant_request_id',
                      'checkout_request_id', 'mpesa_receipt_number')
        }),
        ('Status', {
            'fields': ('status', 'result_code', 'result_desc')
        }),
        ('Callback Data', {
            'fields': ('callback_data',),
            'classes': ('collapse',)
        }),
        ('Timestamps', {
            'fields': ('created_at', 'updated_at', 'completed_at'),
            'classes': ('collapse',)
        }),
    )
