from django.contrib import admin

from .models import Account, Entry, Transaction


class EntryInline(admin.TabularInline):
    model = Entry
    extra = 0
    readonly_fields = ['account', 'amount', 'created_at']
    can_delete = False


@admin.register(Account)
class AccountAdmin(admin.ModelAdmin):
    list_display = ['id', 'kind', 'user', 'balance']
    list_filter = ['kind']
    search_fields = ['user__phone', 'user__name']

    def balance(self, obj):
        return obj.balance


@admin.register(Transaction)
class TransactionAdmin(admin.ModelAdmin):
    list_display = ['id', 'kind', 'reference_type', 'reference_id',
                    'idempotency_key', 'created_at']
    list_filter = ['kind']
    search_fields = ['idempotency_key', 'reference_id', 'memo']
    inlines = [EntryInline]
    readonly_fields = ['kind', 'idempotency_key', 'reference_type',
                       'reference_id', 'memo', 'created_by', 'created_at']

    def has_add_permission(self, request):
        # Transactions must be created through the ledger service, never by hand.
        return False
