from django.contrib import admin

from locations.models import County, Division, Location, SubCounty, SubLocation


@admin.register(County)
class CountyAdmin(admin.ModelAdmin):
    list_display = ("id", "name", "updated_at")
    search_fields = ("name",)
    readonly_fields = ("created_at", "updated_at")


@admin.register(SubCounty)
class SubCountyAdmin(admin.ModelAdmin):
    list_display = ("id", "name", "county", "updated_at")
    list_filter = ("county",)
    search_fields = ("name", "county__name")
    autocomplete_fields = ("county",)
    readonly_fields = ("created_at", "updated_at")


@admin.register(Division)
class DivisionAdmin(admin.ModelAdmin):
    list_display = ("id", "name", "sub_county", "county_name", "updated_at")
    list_filter = ("sub_county__county", "sub_county")
    search_fields = ("name", "sub_county__name", "sub_county__county__name")
    autocomplete_fields = ("sub_county",)
    readonly_fields = ("created_at", "updated_at")

    @admin.display(description="County")
    def county_name(self, obj):
        return obj.sub_county.county.name


@admin.register(Location)
class LocationAdmin(admin.ModelAdmin):
    list_display = ("id", "name", "division", "sub_county_name", "county_name", "updated_at")
    list_filter = ("division__sub_county__county", "division__sub_county", "division")
    search_fields = ("name", "division__name", "division__sub_county__name", "division__sub_county__county__name")
    autocomplete_fields = ("division",)
    readonly_fields = ("created_at", "updated_at")

    @admin.display(description="Sub-county")
    def sub_county_name(self, obj):
        return obj.division.sub_county.name

    @admin.display(description="County")
    def county_name(self, obj):
        return obj.division.sub_county.county.name


@admin.register(SubLocation)
class SubLocationAdmin(admin.ModelAdmin):
    list_display = ("id", "name", "location", "division_name", "sub_county_name", "county_name", "updated_at")
    list_filter = ("location__division__sub_county__county", "location__division__sub_county", "location__division", "location")
    search_fields = (
        "name",
        "location__name",
        "location__division__name",
        "location__division__sub_county__name",
        "location__division__sub_county__county__name",
    )
    autocomplete_fields = ("location",)
    readonly_fields = ("created_at", "updated_at")

    @admin.display(description="Division")
    def division_name(self, obj):
        return obj.location.division.name

    @admin.display(description="Sub-county")
    def sub_county_name(self, obj):
        return obj.location.division.sub_county.name

    @admin.display(description="County")
    def county_name(self, obj):
        return obj.location.division.sub_county.county.name

