from django.contrib import admin

from .models import Deposit, GatewayCallbackLog, PaymentAddress, WithdrawalRequest


@admin.register(PaymentAddress)
class PaymentAddressAdmin(admin.ModelAdmin):
    list_display = (
        "id",
        "user",
        "blockchain",
        "asset",
        "address",
        "status",
        "expires_at",
        "created_at",
    )
    list_filter = ("status", "blockchain", "asset")
    search_fields = ("address", "user__telegram_user_id", "user__username")
    ordering = ("-created_at",)


@admin.register(Deposit)
class DepositAdmin(admin.ModelAdmin):
    list_display = (
        "id",
        "user",
        "blockchain",
        "asset",
        "amount",
        "transaction_hash",
        "status",
        "confirmations",
        "confirmed_at",
        "detected_at",
    )
    list_filter = ("status", "blockchain", "asset")
    search_fields = (
        "transaction_hash",
        "address__address",
        "user__telegram_user_id",
        "user__username",
    )
    ordering = ("-detected_at",)
    raw_id_fields = ("address", "transaction")


@admin.register(WithdrawalRequest)
class WithdrawalRequestAdmin(admin.ModelAdmin):
    list_display = (
        "id",
        "user",
        "blockchain",
        "asset",
        "amount",
        "destination_address",
        "status",
        "gateway_reference",
        "transaction_hash",
        "requested_at",
        "processed_at",
    )
    list_filter = ("status", "blockchain", "asset")
    search_fields = (
        "gateway_reference",
        "transaction_hash",
        "destination_address",
        "user__telegram_user_id",
        "user__username",
    )
    ordering = ("-requested_at",)
    raw_id_fields = ("transaction",)


@admin.register(GatewayCallbackLog)
class GatewayCallbackLogAdmin(admin.ModelAdmin):
    list_display = (
        "id",
        "event_type",
        "status",
        "related_deposit",
        "related_withdrawal",
        "received_at",
        "processed_at",
    )
    list_filter = ("status", "event_type")
    search_fields = (
        "event_type",
        "related_deposit__transaction_hash",
        "related_withdrawal__gateway_reference",
    )
    ordering = ("-received_at",)
    raw_id_fields = ("related_deposit", "related_withdrawal")
