"""
Django admin configuration for the binary_tree app.
"""

from django.contrib import admin
from django.utils.html import format_html

from .models import (
    BinaryLevelSnapshot,
    BinaryPlacementLog,
    BinaryTreeMetrics,
    PowerStreamForfeitureLog,
)


# ─────────────────────────────────────────────────────────────────────────────
# BinaryTreeMetrics
# ─────────────────────────────────────────────────────────────────────────────

@admin.register(BinaryTreeMetrics)
class BinaryTreeMetricsAdmin(admin.ModelAdmin):
    list_display = (
        'distributor_link', 'left_volume', 'right_volume',
        'subtree_total', 'weak_leg', 'imbalance_ratio', 'tree_depth',
        'last_rebuilt_at',
    )
    list_filter = ('weak_leg',)
    search_fields = (
        'distributor__distributor_code',
        'distributor__user__email',
        'distributor__user__first_name',
        'distributor__user__last_name',
    )
    readonly_fields = (
        'distributor', 'left_volume', 'right_volume', 'subtree_total',
        'direct_left_count', 'direct_right_count', 'tree_depth',
        'weak_leg', 'strong_leg', 'imbalance_ratio', 'last_rebuilt_at',
    )
    ordering = ('-imbalance_ratio',)

    @admin.display(description='Distributor')
    def distributor_link(self, obj):
        url = f'/admin/distributor/distributorid/{obj.distributor_id}/change/'
        code = getattr(obj.distributor, 'distributor_code', str(obj.distributor_id))
        return format_html('<a href="{}">{}</a>', url, code)


# ─────────────────────────────────────────────────────────────────────────────
# BinaryPlacementLog
# ─────────────────────────────────────────────────────────────────────────────

@admin.register(BinaryPlacementLog)
class BinaryPlacementLogAdmin(admin.ModelAdmin):
    list_display = (
        'distributor', 'binary_parent', 'binary_position',
        'placement_type', 'sponsor', 'created_at',
    )
    list_filter = ('placement_type', 'binary_position')
    search_fields = (
        'distributor__distributor_code',
        'distributor__user__email',
        'binary_parent__distributor_code',
    )
    readonly_fields = (
        'distributor', 'binary_parent', 'binary_position',
        'placement_type', 'sponsor', 'notes', 'created_at',
    )
    ordering = ('-created_at',)
    date_hierarchy = 'created_at'


# ─────────────────────────────────────────────────────────────────────────────
# BinaryLevelSnapshot
# ─────────────────────────────────────────────────────────────────────────────

@admin.register(BinaryLevelSnapshot)
class BinaryLevelSnapshotAdmin(admin.ModelAdmin):
    list_display = (
        'distributor_link', 'current_level', 'last_completed_level',
        'subtree_total', 'left_volume', 'right_volume',
        'progress_percent', 'calculated_at',
    )
    search_fields = (
        'distributor__distributor_code',
        'distributor__user__email',
    )
    readonly_fields = (
        'distributor', 'subtree_total', 'left_volume', 'right_volume',
        'current_level', 'last_completed_level', 'next_level',
        'next_level_required', 'positions_to_next',
        'progress_percent', 'created_at', 'updated_at', 'calculated_at',
    )
    ordering = ('-current_level', '-subtree_total')

    @admin.display(description='Distributor')
    def distributor_link(self, obj):
        url = f'/admin/distributor/distributorid/{obj.distributor_id}/change/'
        code = getattr(obj.distributor, 'distributor_code', str(obj.distributor_id))
        return format_html('<a href="{}">{}</a>', url, code)


# ─────────────────────────────────────────────────────────────────────────────
# PowerStreamForfeitureLog
# ─────────────────────────────────────────────────────────────────────────────

@admin.register(PowerStreamForfeitureLog)
class PowerStreamForfeitureLogAdmin(admin.ModelAdmin):
    list_display = (
        'user', 'gross_amount', 'net_amount', 'reason',
        'grace_expired', 'forfeited_at',
    )
    list_filter = ('grace_expired', 'reason')
    search_fields = ('user__email', 'user__first_name', 'user__last_name')
    readonly_fields = (
        'bonus_record', 'user', 'gross_amount', 'net_amount',
        'reason', 'grace_expired', 'forfeited_at', 'created_at',
    )
    ordering = ('-forfeited_at',)
    date_hierarchy = 'forfeited_at'
