"""Django admin for the Chat module."""

from __future__ import annotations

from django.contrib import admin
from django.utils.translation import gettext_lazy as _

try:
    from unfold.admin import ModelAdmin as UnfoldModelAdmin, TabularInline as UnfoldTabularInline
except ImportError:
    UnfoldModelAdmin = admin.ModelAdmin  # type: ignore[assignment]
    UnfoldTabularInline = admin.TabularInline  # type: ignore[assignment]

from .models import DirectConversation, DirectMessage, GroupConversation, GroupMember, GroupMessage


@admin.register(DirectConversation)
class DirectConversationAdmin(UnfoldModelAdmin):
    list_display = ("id", "tenant", "user1", "user2", "last_message_at", "created_at")
    list_filter = ("tenant",)
    search_fields = ("user1__email", "user2__email")
    readonly_fields = ("tenant", "user1", "user2", "last_message_at", "created_at", "updated_at")


@admin.register(DirectMessage)
class DirectMessageAdmin(UnfoldModelAdmin):
    list_display = ("id", "conversation", "sender", "short_body", "has_attachment", "is_read", "created_at")
    list_filter = ("is_read", "conversation__tenant")
    search_fields = ("sender__email", "body")
    readonly_fields = ("conversation", "sender", "body", "attachment", "is_read", "created_at", "updated_at")

    @admin.display(description=_("Body"))
    def short_body(self, obj: DirectMessage) -> str:
        return (obj.body or "")[:60] + ("…" if len(obj.body or "") > 60 else "")

    @admin.display(boolean=True, description=_("Has file"))
    def has_attachment(self, obj: DirectMessage) -> bool:
        return obj.attachment_id is not None


class GroupMemberInline(UnfoldTabularInline):
    model = GroupMember
    extra = 0
    fields = ("user", "role", "last_read_at")
    readonly_fields = ("last_read_at",)


@admin.register(GroupConversation)
class GroupConversationAdmin(UnfoldModelAdmin):
    list_display = ("name", "tenant", "kind", "last_message_at", "created_at")
    list_filter = ("kind", "tenant")
    search_fields = ("name",)
    readonly_fields = ("created_at", "updated_at", "last_message_at")
    inlines = [GroupMemberInline]


@admin.register(GroupMember)
class GroupMemberAdmin(UnfoldModelAdmin):
    list_display = ("user", "group", "role", "created_at")
    list_filter = ("role",)
    search_fields = ("user__email", "group__name")
    readonly_fields = ("created_at", "updated_at")


@admin.register(GroupMessage)
class GroupMessageAdmin(UnfoldModelAdmin):
    list_display = ("id", "group", "sender", "short_body", "created_at")
    list_filter = ("group__tenant",)
    search_fields = ("sender__email", "body")
    readonly_fields = ("created_at", "updated_at")

    @admin.display(description=_("Body"))
    def short_body(self, obj: GroupMessage) -> str:
        return (obj.body or "")[:60] + ("…" if len(obj.body or "") > 60 else "")

