from django.contrib import admin
from django.contrib.humanize.templatetags.humanize import intcomma
from payment.models import InstituteBalanceHistory, Transaction, UserBalanceHistory


class UserBalanceAdmin(admin.ModelAdmin):

    list_display = ('user_full_name', 'human_readable_amount',
                    'human_readable_remaining_balance')
    ordering = ('-created_at',)

    def user_full_name(self, obj):
        # because we set on_delete=models.SET_NULL, user may be null
        if obj.user:
            return f"{obj.user.first_name} {obj.user.last_name}"
        else:
            return "NULL User"

    def human_readable_amount(self, obj):
        balance = f" تومان {intcomma(obj.amount)}"
        return balance

    def human_readable_remaining_balance(self, obj):
        balance = f" تومان {intcomma(obj.remaining_balance)}"
        return balance


admin.site.register(UserBalanceHistory, UserBalanceAdmin)


class InstituteBalanceAdmin(admin.ModelAdmin):

    list_display = ('institute', 'human_readable_amount',
                    'human_readable_remaining_balance')
    ordering = ('-created_at',)

    def human_readable_amount(self, obj):
        balance = f" تومان {intcomma(obj.amount)}"
        return balance

    def human_readable_remaining_balance(self, obj):
        balance = f" تومان {intcomma(obj.remaining_balance)}"
        return balance


admin.site.register(InstituteBalanceHistory, InstituteBalanceAdmin)


class TransactionAdmin(admin.ModelAdmin):

    list_display = ('user', 'authority', 'amount', 'status',
                    'ref_id', 'modified_at', 'meta')

    search_fields = ('authority', 'ref_id', 'user__name', 'user__email')
    list_filter = ['status']
    ordering = ('-created_at',)


admin.site.register(Transaction, TransactionAdmin)
