from django.contrib import admin
from simple_history.admin import SimpleHistoryAdmin

from apps.mel.tracking.models import (
    Activity,
    ActivityDependency,
    CorrectiveAction,
    OutputDeliverable,
    SMEHubFeedHandlerLog,
    UpstreamEvent,
)


@admin.register(UpstreamEvent)
class UpstreamEventAdmin(admin.ModelAdmin):
    list_display = ("module", "event_type", "source_object_id", "subject", "recorded_at")
    list_filter = ("module", "event_type")
    search_fields = ("source_object_id", "payload")
    readonly_fields = ("module", "event_type", "source_object_id", "payload", "subject", "recorded_at")


class ActivityDependencyInline(admin.TabularInline):
    model = ActivityDependency
    fk_name = "from_activity"
    extra = 0


@admin.register(Activity)
class ActivityAdmin(SimpleHistoryAdmin):
    list_display = ("name", "logframe_row", "status", "scheduled_start", "scheduled_end", "deviation_flag")
    list_filter = ("status", "deviation_flag")
    search_fields = ("name", "description")
    autocomplete_fields = ("logframe_row", "responsible", "parent")
    inlines = [ActivityDependencyInline]


@admin.register(OutputDeliverable)
class OutputDeliverableAdmin(SimpleHistoryAdmin):
    list_display = ("title", "logframe_row", "status", "target_quantity", "achieved_quantity", "due_date")
    list_filter = ("status",)
    search_fields = ("title", "description")
    autocomplete_fields = ("logframe_row",)


@admin.register(CorrectiveAction)
class CorrectiveActionAdmin(SimpleHistoryAdmin):
    list_display = ("title", "status", "subject_type", "subject_id", "due_date", "owner")
    list_filter = ("status", "subject_type")
    search_fields = ("title", "root_cause", "action_plan")
    autocomplete_fields = ("owner", "created_by")


@admin.register(SMEHubFeedHandlerLog)
class SMEHubFeedHandlerLogAdmin(admin.ModelAdmin):
    """FRSME-MEI007 — surface failed SME-Hub → M&EL data feeds for review."""

    list_display = (
        "signal_name",
        "entrepreneur",
        "is_resolved",
        "manual_entry",
        "resolved_by",
        "resolved_at",
        "created_at",
    )
    list_filter = ("signal_name", "manual_entry", "resolved_at")
    search_fields = ("signal_name", "error")
    date_hierarchy = "created_at"
    raw_id_fields = ("entrepreneur", "resolved_by")
    readonly_fields = (
        "signal_name",
        "payload",
        "error",
        "entrepreneur",
        "created_at",
        "resolved_at",
        "resolved_by",
        "resolution_note",
        "manual_entry",
    )

    @admin.display(boolean=True, description="Resolved")
    def is_resolved(self, obj):
        return obj.resolved_at is not None
