from collections import Counter

from django.contrib import admin

from app_admin.mixins import ReadOnlyAdmin

from .models import RealEstate, RealEstateUnit


@admin.register(RealEstate)
class RealEstateAdmin(ReadOnlyAdmin):
    list_display = ('REID', 'strasse_hausnummer', 'plz_ort', 'einheiten_nach_klasse')
    search_fields = ('Street', 'City')

    def get_queryset(self, request):
        return super().get_queryset(request).prefetch_related('realestateunit_set')

    @admin.display(description='Straße / Nr.')
    def strasse_hausnummer(self, obj):
        return ' '.join(filter(None, [obj.Street, obj.HouseNumber]))

    @admin.display(description='PLZ Ort')
    def plz_ort(self, obj):
        return ' '.join(filter(None, [obj.PostalCode, obj.City]))

    REUC_LABELS = {
        1: 'Wohnung',
        2: 'Gewerbe',
        3: 'Stellplatz',
        4: 'TG-Stellplatz',
        5: 'Gartenfläche',
    }

    @admin.display(description='Einheiten nach Klasse')
    def einheiten_nach_klasse(self, obj):
        counts = Counter(u.REUCID for u in obj.realestateunit_set.all())
        if not counts:
            return '–'
        parts = []
        for klasse, count in sorted(counts.items(), key=lambda x: (x[0] is None, x[0])):
            label = self.REUC_LABELS.get(klasse, f'Klasse {klasse}') if klasse is not None else 'Ohne Klasse'
            parts.append(f'{label}: {count}')
        return ', '.join(parts)

@admin.register(RealEstateUnit)
class RealEstateUnitAdmin(ReadOnlyAdmin):
    list_display = ('REUID', 'REID', 'REUDesc', 'REUCID')
    list_filter = ('REID',)
    ordering = ('REID',)
