"""SLA Engine Django admin registration."""

from __future__ import annotations

from django.contrib import admin

from simorgh.apps.sla_engine.models import (
    SLABreach,
    SLAPolicy,
    SLATimer,
)


@admin.register(SLAPolicy)
class SLAPolicyAdmin(admin.ModelAdmin):
    list_display = ("name", "sla_type", "target_hours", "business_hours_only", "is_active", "tenant")
    list_filter = ("sla_type", "is_active", "business_hours_only", "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")}),
        ("SLA Configuration", {"fields": ("sla_type", "target_hours", "warning_hours", "business_hours_only")}),
        ("Scope", {"fields": ("content_type", "conditions", "priority")}),
        ("Status", {"fields": ("is_active",)}),
        ("Metadata", {"fields": ("created_at", "updated_at"), "classes": ("collapse",)}),
    )


@admin.register(SLATimer)
class SLATimerAdmin(admin.ModelAdmin):
    list_display = ("policy", "content_type", "object_id", "started_at", "target_at", "is_breached", "is_stopped", "tenant")
    list_filter = ("is_breached", "is_stopped", "policy__sla_type", "tenant")
    search_fields = ("policy__name",)
    raw_id_fields = ("policy", "tenant", "content_type")
    readonly_fields = ("public_id", "created_at", "updated_at")
    fieldsets = (
        (None, {"fields": ("public_id", "policy", "tenant")}),
        ("Entity", {"fields": ("content_type", "object_id")}),
        ("Timing", {"fields": ("started_at", "target_at", "warning_at")}),
        ("Pause", {"fields": ("paused_at", "accumulated_seconds")}),
        ("Status", {"fields": ("warning_sent", "is_breached", "breached_at", "is_recovered", "recovered_at", "is_stopped", "stopped_at")}),
        ("Metadata", {"fields": ("created_at", "updated_at"), "classes": ("collapse",)}),
    )


@admin.register(SLABreach)
class SLABreachAdmin(admin.ModelAdmin):
    list_display = ("policy", "status", "occurred_at", "content_type", "object_id", "tenant")
    list_filter = ("status", "tenant")
    search_fields = ("policy__name", "notes")
    raw_id_fields = ("timer", "policy", "tenant", "content_type")
    readonly_fields = ("public_id", "created_at", "updated_at")
    fieldsets = (
        (None, {"fields": ("public_id", "timer", "policy", "tenant")}),
        ("Entity", {"fields": ("content_type", "object_id")}),
        ("Breach Info", {"fields": ("status", "occurred_at", "notes")}),
        ("Metadata", {"fields": ("created_at", "updated_at"), "classes": ("collapse",)}),
    )
