"""Escalation Engine Django admin registration."""

from __future__ import annotations

from django.contrib import admin

from simorgh.apps.escalation_engine.models import (
    EscalationInstance,
    EscalationLog,
    EscalationRule,
)


@admin.register(EscalationRule)
class EscalationRuleAdmin(admin.ModelAdmin):
    list_display = (
        "name",
        "trigger_type",
        "escalation_type",
        "max_levels",
        "is_active",
        "tenant",
    )
    list_filter = ("trigger_type", "escalation_type", "is_active", "tenant")
    search_fields = ("name", "description")
    raw_id_fields = ("tenant", "organization_node", "content_type")
    readonly_fields = ("public_id", "created_at", "updated_at")
    fieldsets = (
        (
            None,
            {
                "fields": (
                    "public_id",
                    "tenant",
                    "organization_node",
                    "name",
                    "description",
                )
            },
        ),
        (
            "Triggers",
            {
                "fields": ("trigger_type", "trigger_config"),
            },
        ),
        (
            "Escalation",
            {
                "fields": ("escalation_type", "escalation_config", "max_levels"),
            },
        ),
        (
            "Scope",
            {
                "fields": ("content_type", "conditions", "priority"),
            },
        ),
        ("Status", {"fields": ("is_active",)}),
        (
            "Metadata",
            {
                "fields": ("created_at", "updated_at"),
                "classes": ("collapse",),
            },
        ),
    )


@admin.register(EscalationInstance)
class EscalationInstanceAdmin(admin.ModelAdmin):
    list_display = (
        "rule",
        "status",
        "escalation_level",
        "source_content_type",
        "source_object_id",
        "triggered_at",
        "tenant",
    )
    list_filter = (
        "status",
        "rule__trigger_type",
        "tenant",
    )
    search_fields = ("rule__name", "reason")
    raw_id_fields = (
        "rule",
        "tenant",
        "source_content_type",
        "escalated_from_user",
        "escalated_to_user",
        "escalated_to_role",
    )
    readonly_fields = ("public_id", "created_at", "updated_at")
    fieldsets = (
        (
            None,
            {
                "fields": (
                    "public_id",
                    "rule",
                    "tenant",
                )
            },
        ),
        (
            "Source Entity",
            {
                "fields": ("source_content_type", "source_object_id"),
            },
        ),
        (
            "Status & Level",
            {
                "fields": ("status", "escalation_level"),
            },
        ),
        (
            "Escalation Target",
            {
                "fields": (
                    "escalated_from_user",
                    "escalated_to_user",
                    "escalated_to_role",
                ),
            },
        ),
        (
            "Timeline",
            {
                "fields": ("triggered_at", "escalated_at", "resolved_at"),
            },
        ),
        (
            "Details",
            {
                "fields": ("reason", "resolution_note"),
            },
        ),
        (
            "Metadata",
            {
                "fields": ("created_at", "updated_at"),
                "classes": ("collapse",),
            },
        ),
    )


@admin.register(EscalationLog)
class EscalationLogAdmin(admin.ModelAdmin):
    list_display = ("instance", "action", "actor", "tenant", "created_at")
    list_filter = ("action", "tenant")
    search_fields = ("instance__rule__name", "note")
    raw_id_fields = ("instance", "rule", "tenant", "actor")
    readonly_fields = ("public_id", "created_at")
    fieldsets = (
        (
            None,
            {
                "fields": (
                    "public_id",
                    "instance",
                    "rule",
                    "tenant",
                    "action",
                )
            },
        ),
        (
            "Details",
            {
                "fields": ("actor", "note", "metadata"),
            },
        ),
        (
            "Metadata",
            {
                "fields": ("created_at",),
                "classes": ("collapse",),
            },
        ),
    )
