from django.apps import AppConfig


class DMSConfig(AppConfig):
    default_auto_field = "django.db.models.BigAutoField"
    name = "simorgh.apps.dms"
    label = "dms"
    verbose_name = "Document Management System"

    def ready(self) -> None:
        from simorgh.apps.dms.assets.permissions import register_all as _register_permissions
        from simorgh.apps.dms.repositories.permissions import register_all as _register_repo_permissions
        from simorgh.apps.dms.documents.permissions import register_all as _register_doc_permissions
        from simorgh.apps.dms.preview.permissions import register_all as _register_preview_permissions
        from simorgh.apps.dms.permissions.iam_permissions import register_all as _register_acl_permissions
        from simorgh.apps.dms.versioning.iam_permissions import register_all as _register_versioning_permissions
        from simorgh.apps.dms.search.iam_permissions import register_all as _register_search_permissions
        from simorgh.apps.dms.collaboration.iam_permissions import register_all as _register_collab_permissions
        from simorgh.apps.dms.records.iam_permissions import register_all as _register_records_permissions
        from simorgh.apps.dms.ai.iam_permissions import register_all as _register_ai_permissions
        from simorgh.apps.dms.audit.iam_permissions import register_all as _register_audit_permissions
        from simorgh.apps.dms.settings_api import _register_settings_permission
        from simorgh.apps.dms.workflow.iam_permissions import register_all as _register_workflow_permissions

        _register_permissions()
        _register_repo_permissions()
        _register_doc_permissions()
        _register_preview_permissions()
        _register_acl_permissions()
        _register_versioning_permissions()
        _register_search_permissions()
        _register_collab_permissions()
        _register_records_permissions()
        _register_ai_permissions()
        _register_audit_permissions()
        _register_settings_permission()
        _register_workflow_permissions()

        # Register DMS app_settings definitions
        from simorgh.apps.dms import settings as _  # noqa: F401

        # Connect realtime broadcast signals (post_save → channel layer).
        from simorgh.apps.dms.signals import connect_all as _connect_signals
        _connect_signals()

        # Register DMS domain events (Phase 14)
        from simorgh.apps.dms.events import definitions as _dms_events  # noqa: F401

        # Wire DMS event handlers (Phase 14)
        from simorgh.apps.dms.events import handlers as _dms_handlers  # noqa: F401

        # Connect search index signals
        from django.db.models.signals import post_save
        from simorgh.apps.dms.documents.models import Document, DocumentVersion
        from simorgh.apps.dms.search.signals import on_document_saved, on_version_saved

        post_save.connect(on_document_saved, sender=Document, dispatch_uid="dms_search_index_document")
        post_save.connect(on_version_saved, sender=DocumentVersion, dispatch_uid="dms_search_index_version")

        # Register DMS notification templates (Phase 15)
        from simorgh.apps.dms.notifications import templates as _dms_notif_templates  # noqa: F401

        # Wire DMS notification event-bus handlers (Phase 15)
        from simorgh.apps.dms.notifications import handlers as _dms_notif_handlers  # noqa: F401

        # Connect Django signals for collaboration notifications (Phase 15)
        from simorgh.apps.dms.collaboration.models import Comment, Mention
        from simorgh.apps.dms.notifications.handlers import (
            on_comment_resolved,
            on_mention_created,
        )

        post_save.connect(
            on_mention_created,
            sender=Mention,
            dispatch_uid="dms_notify_mention_created",
        )
        post_save.connect(
            on_comment_resolved,
            sender=Comment,
            dispatch_uid="dms_notify_comment_resolved",
        )
