"""Django admin configuration for Automation Engine models."""

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
except ImportError:
    UnfoldModelAdmin = admin.ModelAdmin  # type: ignore[assignment]

from simorgh.apps.automation.models import AutomationExecution, AutomationRule, AutomationTemplate


@admin.register(AutomationRule)
class AutomationRuleAdmin(UnfoldModelAdmin):
    list_display = (
        "name",
        "trigger_type",
        "trigger_event",
        "is_active",
        "run_count",
        "last_run_at",
        "last_status",
        "tenant",
    )
    list_filter = ("is_active", "trigger_type", "last_status", "tenant")
    search_fields = ("name", "trigger_event", "tenant__name")
    readonly_fields = ("version", "run_count", "last_run_at", "last_status", "public_id", "created_at", "updated_at")
    ordering = ("-created_at",)


@admin.register(AutomationExecution)
class AutomationExecutionAdmin(UnfoldModelAdmin):
    list_display = (
        "rule",
        "trigger_event",
        "status",
        "started_at",
        "finished_at",
        "idempotency_key",
        "tenant",
    )
    list_filter = ("status", "tenant")
    search_fields = ("trigger_event", "rule__name", "idempotency_key")
    readonly_fields = (
        "public_id",
        "rule",
        "rule_version",
        "trigger_event",
        "trigger_payload",
        "idempotency_key",
        "started_at",
        "finished_at",
        "status",
        "actions_executed",
        "error_message",
        "created_at",
        "updated_at",
    )
    ordering = ("-started_at",)

    def has_add_permission(self, request) -> bool:  # noqa: ARG002
        return False

    def has_change_permission(self, request, obj=None) -> bool:  # noqa: ARG002
        return False


@admin.register(AutomationTemplate)
class AutomationTemplateAdmin(UnfoldModelAdmin):
    list_display = (
        "name",
        "trigger_type",
        "trigger_event",
        "created_at",
    )
    list_filter = ("trigger_type",)
    search_fields = ("name", "trigger_event")
    readonly_fields = ("public_id", "created_at", "updated_at")
    ordering = ("name",)
