"""DMS domain event definitions.

All DMS events are registered here with the shared event bus so that they
appear in the event registry, can be dispatched, and subscribers receive
type-safe payloads.

This module is imported by ``DMSConfig.ready()`` to ensure events are
registered before any handler subscribes to them.
"""

from __future__ import annotations

from simorgh.apps.events.bus import register_event

# ---------------------------------------------------------------------------
# Workflow / document lifecycle events
# ---------------------------------------------------------------------------

register_event(
    "dms.document.created",
    description="A new document shell was created.",
    payload_keys=("document_id", "tenant_id", "actor_id"),
)

register_event(
    "dms.document.submitted_for_review",
    description="A document was submitted for review (or resubmitted after rejection).",
    payload_keys=("document_id", "tenant_id", "actor_id", "workflow_status", "comment"),
)

register_event(
    "dms.document.approved",
    description="A document was approved by a reviewer.",
    payload_keys=("document_id", "tenant_id", "actor_id", "workflow_status", "comment"),
)

register_event(
    "dms.document.rejected",
    description="A document was rejected by a reviewer.",
    payload_keys=("document_id", "tenant_id", "actor_id", "workflow_status", "comment"),
)

register_event(
    "dms.document.published",
    description="A document was published (workflow approved and promoted to live).",
    payload_keys=("document_id", "tenant_id", "actor_id", "workflow_status", "comment"),
)

register_event(
    "dms.document.archived",
    description="A document was archived.",
    payload_keys=("document_id", "tenant_id", "actor_id", "workflow_status", "comment"),
)

register_event(
    "dms.document.retracted",
    description="A document was retracted from review back to draft.",
    payload_keys=("document_id", "tenant_id", "actor_id", "workflow_status", "comment"),
)

# ---------------------------------------------------------------------------
# Versioning events
# ---------------------------------------------------------------------------

register_event(
    "dms.version.added",
    description="A new document version was uploaded.",
    payload_keys=("document_id", "version_id", "tenant_id", "actor_id"),
)

# ---------------------------------------------------------------------------
# Collaboration / lock events
# ---------------------------------------------------------------------------

register_event(
    "dms.checkout.expired",
    description="A document lock (checkout) expired and was released.",
    payload_keys=("document_id", "lock_id", "tenant_id"),
)

# ---------------------------------------------------------------------------
# Records / legal hold
# ---------------------------------------------------------------------------

register_event(
    "dms.hold.placed",
    description="A legal hold was placed on a document.",
    payload_keys=("document_id", "hold_id", "tenant_id", "actor_id"),
)

# ---------------------------------------------------------------------------
# AI / OCR events
# ---------------------------------------------------------------------------

register_event(
    "dms.ocr.completed",
    description="OCR processing completed for a document version.",
    payload_keys=("document_id", "version_id", "tenant_id"),
)
