"""Helpdesk Django admin registrations."""

from django.contrib import admin

from simorgh.apps.helpdesk.models import (
    AgentTeam,
    AgentTeamMember,
    Automation,
    Category,
    Queue,
    SLAPolicy,
    SLATimer,
    Tag,
    Ticket,
    TicketReply,
    TicketTag,
)


@admin.register(Queue)
class QueueAdmin(admin.ModelAdmin):
    list_display = ("name", "tenant", "is_default", "is_active", "sort_order")
    list_filter = ("tenant", "is_active", "is_default")
    search_fields = ("name",)


@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ("name", "queue", "parent", "is_active", "sort_order")
    list_filter = ("tenant", "is_active", "queue")
    search_fields = ("name",)


@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
    list_display = ("name", "tenant", "color", "is_active")
    list_filter = ("tenant", "is_active")
    search_fields = ("name",)


@admin.register(SLAPolicy)
class SLAPolicyAdmin(admin.ModelAdmin):
    list_display = (
        "name", "tenant",
        "first_response_hours", "resolution_hours",
        "business_hours_only", "is_active",
    )
    list_filter = ("tenant", "is_active")


class TicketTagInline(admin.TabularInline):
    model = TicketTag
    extra = 0
    readonly_fields = ("added_by",)


class TicketReplyInline(admin.TabularInline):
    model = TicketReply
    extra = 0
    readonly_fields = ("author", "is_internal", "created_at")
    fields = ("author", "is_internal", "body", "created_at")


class SLATimerInline(admin.TabularInline):
    model = SLATimer
    extra = 0
    readonly_fields = ("breach_type", "due_at", "breached_at", "is_resolved")


@admin.register(Ticket)
class TicketAdmin(admin.ModelAdmin):
    list_display = (
        "pk", "subject", "status", "priority", "queue",
        "assigned_to", "tenant", "created_at",
    )
    list_filter = ("status", "priority", "channel", "tenant", "queue")
    search_fields = ("subject", "requester_email", "requester_name")
    readonly_fields = (
        "public_id", "created_at", "updated_at",
        "first_responded_at", "resolved_at", "closed_at",
    )
    inlines = [TicketTagInline, TicketReplyInline, SLATimerInline]


@admin.register(TicketReply)
class TicketReplyAdmin(admin.ModelAdmin):
    list_display = ("pk", "ticket", "is_internal", "author", "created_at")
    list_filter = ("is_internal", "channel")
    search_fields = ("body", "author_email")


@admin.register(Automation)
class AutomationAdmin(admin.ModelAdmin):
    list_display = ("name", "trigger", "is_active", "sort_order", "run_count", "last_run_at")
    list_filter = ("tenant", "trigger", "is_active")
    search_fields = ("name",)


# ---------------------------------------------------------------------------
# Agent Teams
# ---------------------------------------------------------------------------

class AgentTeamMemberInline(admin.TabularInline):
    model = AgentTeamMember
    extra = 0
    raw_id_fields = ("user", "added_by")
    fields = ("user", "role", "added_by", "created_at")
    readonly_fields = ("created_at",)


@admin.register(AgentTeam)
class AgentTeamAdmin(admin.ModelAdmin):
    list_display  = ("name", "tenant", "is_active", "sort_order", "member_count")
    list_filter   = ("tenant", "is_active")
    search_fields = ("name",)
    filter_horizontal = ("categories",)
    inlines = [AgentTeamMemberInline]

    @admin.display(description="members")
    def member_count(self, obj: AgentTeam) -> int:
        return obj.memberships.count()
