"""WorkItem domain event definitions."""

from __future__ import annotations

from simorgh.apps.events.bus import register_event


def register_all() -> None:
    """Register all WorkItem domain events into the event bus registry."""

    # ── Canonical WorkItem events ──────────────────────────────────────
    register_event(
        "workbox.workitem_created",
        description="A new WorkItem was created as a canonical platform record.",
        payload_keys=("item_id", "assigned_to_user_id", "item_type", "tenant_id"),
    )
    register_event(
        "workbox.workitem_completed",
        description="A WorkItem was completed.",
        payload_keys=("item_id", "assigned_to_user_id", "tenant_id"),
    )
    register_event(
        "workbox.workitem_reassigned",
        description="A WorkItem was reassigned to a different user/role/unit.",
        payload_keys=("item_id", "from_user_id", "to_user_id", "tenant_id"),
    )
    register_event(
        "workbox.workitem_cancelled",
        description="A WorkItem was cancelled.",
        payload_keys=("item_id", "cancelled_by_id", "tenant_id"),
    )
    register_event(
        "workbox.workitem_expired",
        description="A WorkItem expired because the due date passed without completion.",
        payload_keys=("item_id", "assigned_to_user_id", "tenant_id"),
    )

    # ── Legacy workbox events (backward compatible) ────────────────────
    register_event(
        "workbox.item_created",
        description="A new item appeared in the workbox.",
        payload_keys=("item_id", "user_id", "item_type", "tenant_id"),
    )
    register_event(
        "workbox.item_updated",
        description="A workbox item was updated.",
        payload_keys=("item_id", "user_id", "tenant_id"),
    )
    register_event(
        "workbox.item_removed",
        description="An item was removed from the workbox.",
        payload_keys=("item_id", "user_id", "tenant_id"),
    )
    register_event(
        "workbox.refreshed",
        description="The workbox was refreshed for a user.",
        payload_keys=("user_id", "tenant_id", "item_count"),
    )
