"""Generic events emitted by platform_core services.

Modules can subscribe to these to react to attachments, comments, activity
records, and custom-field changes without coupling to the platform_core
package directly.
"""

from __future__ import annotations

from simorgh.apps.events.bus import register_event


def register_all() -> None:
    register_event(
        "core.attachment_added",
        description="A file was attached to an entity.",
        payload_keys=("tenant_id", "entity_type", "entity_id", "attachment_id"),
    )
    register_event(
        "core.attachment_removed",
        description="An attachment was removed from an entity.",
        payload_keys=("tenant_id", "entity_type", "entity_id", "attachment_id"),
    )
    register_event(
        "core.comment_added",
        description="A comment was posted on an entity.",
        payload_keys=("tenant_id", "entity_type", "entity_id", "comment_id"),
    )
    register_event(
        "core.comment_updated",
        description="A comment was edited.",
        payload_keys=("tenant_id", "comment_id"),
    )
    register_event(
        "core.comment_deleted",
        description="A comment was soft-deleted.",
        payload_keys=("tenant_id", "comment_id"),
    )
    register_event(
        "core.activity_recorded",
        description="An activity entry was written to the feed.",
        payload_keys=("tenant_id", "actor_id", "verb", "entity_type", "entity_id"),
    )
    register_event(
        "core.custom_field_defined",
        description="A new custom field definition was created.",
        payload_keys=("tenant_id", "entity_type", "definition_id"),
    )
    register_event(
        "core.custom_field_value_changed",
        description="A custom field value was set or updated.",
        payload_keys=("tenant_id", "definition_id", "entity_type", "entity_id"),
    )
    register_event(
        "core.tag_created",
        description="A platform-level tag was created.",
        payload_keys=("tenant_id", "tag_id", "slug"),
    )
    register_event(
        "core.tag_deleted",
        description="A platform-level tag was deleted.",
        payload_keys=("tenant_id", "tag_id"),
    )
    register_event(
        "core.tags_added",
        description="One or more tags were assigned to an entity.",
        payload_keys=("tenant_id", "entity_type", "entity_id", "tag_ids"),
    )
    register_event(
        "core.tags_removed",
        description="One or more tags were removed from an entity.",
        payload_keys=("tenant_id", "entity_type", "entity_id", "tag_ids"),
    )
    register_event(
        "core.tags_set",
        description="All tags on an entity were replaced atomically.",
        payload_keys=("tenant_id", "entity_type", "entity_id", "tag_ids"),
    )
    register_event(
        "core.note_created",
        description="A private/team/workspace note was created on an entity.",
        payload_keys=("tenant_id", "entity_type", "entity_id", "note_id"),
    )
    register_event(
        "core.note_edited",
        description="A note was edited (body or pin state changed).",
        payload_keys=("tenant_id", "note_id"),
    )
    register_event(
        "core.note_deleted",
        description="A note was deleted.",
        payload_keys=("tenant_id", "note_id"),
    )
    register_event(
        "core.mention_created",
        description="One or more @username mentions were detected in a comment or note.",
        payload_keys=("tenant_id", "user_ids", "comment_id", "note_id"),
    )
    register_event(
        "core.reference_number_generated",
        description="A reference number was generated for an entity.",
        payload_keys=("tenant_id", "entity_type", "reference"),
    )
    register_event(
        "core.reference_sequence_created",
        description="A reference number sequence was created for an entity type.",
        payload_keys=("tenant_id", "entity_type", "prefix", "sequence_id"),
    )
    register_event(
        "core.form_definition_created",
        description="A dynamic form definition was created.",
        payload_keys=("tenant_id", "form_id", "title"),
    )
    register_event(
        "core.form_definition_updated",
        description="A dynamic form definition was updated.",
        payload_keys=("tenant_id", "form_id"),
    )
    register_event(
        "core.form_definition_deleted",
        description="A dynamic form definition was deleted.",
        payload_keys=("tenant_id", "form_id"),
    )
    register_event(
        "core.form_submitted",
        description="A form was submitted and a FormSubmission record was created.",
        payload_keys=("tenant_id", "form_id", "submission_id", "submit_action"),
    )
    register_event(
        "core.import_job_created",
        description="A bulk-import job was created and queued.",
        payload_keys=("tenant_id", "job_id", "entity_type"),
    )
    register_event(
        "core.import_job_completed",
        description="A bulk-import job finished (with or without row errors).",
        payload_keys=("tenant_id", "job_id", "entity_type", "processed_rows", "error_rows"),
    )
    register_event(
        "core.import_job_failed",
        description="A bulk-import job failed due to an infrastructure error.",
        payload_keys=("tenant_id", "job_id", "entity_type", "reason"),
    )
    register_event(
        "core.export_job_created",
        description="A bulk-export job was created and queued.",
        payload_keys=("tenant_id", "job_id", "entity_type"),
    )
    register_event(
        "core.export_job_completed",
        description="A bulk-export job finished and the file is ready for download.",
        payload_keys=("tenant_id", "job_id", "entity_type", "row_count", "format"),
    )
    register_event(
        "core.export_job_failed",
        description="A bulk-export job failed due to an infrastructure error.",
        payload_keys=("tenant_id", "job_id", "entity_type", "reason"),
    )
    register_event(
        "core.print_template_created",
        description="A new print template was created.",
        payload_keys=("tenant_id", "template_id", "entity_type", "name"),
    )
    register_event(
        "core.print_template_updated",
        description="An existing print template was updated.",
        payload_keys=("tenant_id", "template_id", "entity_type", "name"),
    )
    register_event(
        "core.print_template_deleted",
        description="A print template was deleted.",
        payload_keys=("tenant_id", "template_id", "entity_type", "name"),
    )
    register_event(
        "core.document_template_created",
        description="A new document template was created.",
        payload_keys=("tenant_id", "template_id", "code", "entity_type"),
    )
    register_event(
        "core.document_template_updated",
        description="An existing document template was updated.",
        payload_keys=("tenant_id", "template_id", "code", "entity_type"),
    )
    register_event(
        "core.document_template_deleted",
        description="A document template was deleted.",
        payload_keys=("tenant_id", "template_id", "code", "entity_type"),
    )
    register_event(
        "core.export_layout_created",
        description="A new export layout was created.",
        payload_keys=("tenant_id", "layout_id", "code", "entity_type"),
    )
    register_event(
        "core.export_layout_updated",
        description="An existing export layout was updated.",
        payload_keys=("tenant_id", "layout_id", "code", "entity_type"),
    )
    register_event(
        "core.export_layout_deleted",
        description="An export layout was deleted.",
        payload_keys=("tenant_id", "layout_id", "code", "entity_type"),
    )
