"""Approval Engine Django admin registration."""

from __future__ import annotations

from django.contrib import admin

from simorgh.apps.approval_engine.models import (
    ApprovalMatrix,
    ApprovalRequest,
    ApprovalStep,
    MatrixApproverConfig,
)


@admin.register(ApprovalMatrix)
class ApprovalMatrixAdmin(admin.ModelAdmin):
    list_display  = ("name", "content_type", "is_active", "tenant")
    list_filter   = ("is_active", "tenant", "content_type")
    search_fields = ("name", "description")
    raw_id_fields = ("tenant", "content_type")
    readonly_fields = ("public_id", "created_at", "updated_at")
    fieldsets = (
        (None, {"fields": ("public_id", "tenant", "name", "description")}),
        ("Configuration", {"fields": ("content_type", "conditions", "is_active")}),
        ("Metadata", {"fields": ("created_at", "updated_at"), "classes": ("collapse",)}),
    )


@admin.register(MatrixApproverConfig)
class MatrixApproverConfigAdmin(admin.ModelAdmin):
    list_display  = ("matrix", "step_order", "approver", "approver_role", "is_parallel", "is_required", "quorum")
    list_filter   = ("matrix__tenant", "is_parallel", "is_required")
    search_fields = ("matrix__name",)
    raw_id_fields = ("matrix", "approver", "approver_role", "approver_org_unit")
    readonly_fields = ("created_at", "updated_at")


@admin.register(ApprovalRequest)
class ApprovalRequestAdmin(admin.ModelAdmin):
    list_display  = ("title", "approval_type", "status", "priority", "requested_by", "due_date", "tenant")
    list_filter   = ("approval_type", "status", "priority", "tenant")
    search_fields = ("title", "description")
    raw_id_fields = ("requested_by", "tenant", "organization_node", "content_type", "matrix")
    readonly_fields = ("completed_at", "public_id", "created_at", "updated_at")
    fieldsets = (
        (None, {"fields": ("tenant", "organization_node", "title", "description")}),
        ("Classification", {"fields": ("approval_type", "status", "priority")}),
        ("Request", {"fields": ("requested_by", "matrix")}),
        ("Schedule", {"fields": ("due_date", "completed_at")}),
        ("Entity Link", {"fields": ("content_type", "object_id")}),
        ("Flags", {"fields": ("is_confidential",)}),
        ("Metadata", {"fields": ("public_id", "created_at", "updated_at"), "classes": ("collapse",)}),
    )


@admin.register(ApprovalStep)
class ApprovalStepAdmin(admin.ModelAdmin):
    list_display  = ("request", "step_order", "status", "decision", "approver", "decided_by", "decided_at")
    list_filter   = ("status", "decision", "is_parallel")
    search_fields = ("request__title", "note")
    raw_id_fields = ("request", "approver", "approver_role", "approver_org_unit", "decided_by")
    readonly_fields = ("decided_at", "public_id", "created_at", "updated_at")
    fieldsets = (
        (None, {"fields": ("request", "step_order", "status", "decision")}),
        ("Approver", {"fields": ("approver", "approver_role", "approver_org_unit")}),
        ("Decision", {"fields": ("decided_by", "decided_at", "note")}),
        ("Schedule", {"fields": ("due_date", "is_parallel")}),
        ("Metadata", {"fields": ("public_id", "created_at", "updated_at"), "classes": ("collapse",)}),
    )
