from django.apps import AppConfig


class HelpdeskConfig(AppConfig):
    default_auto_field = "django.db.models.BigAutoField"
    name = "simorgh.apps.helpdesk"
    label = "helpdesk"
    verbose_name = "Help Desk"

    def ready(self) -> None:
        # Register IAM permissions.
        from simorgh.apps.helpdesk.permissions import register_all as _register_permissions
        _register_permissions()
        # Register settings definitions.
        from simorgh.apps.helpdesk import settings as _  # noqa: F401
        # Register ticket FSM + workflow action handlers.
        # Note: workflows.py is also auto-discovered by WorkflowConfig.ready()
        # via autodiscover_modules("workflows"), so this import is idempotent.
        from simorgh.apps.helpdesk import workflows as _  # noqa: F401
        # Register domain events.
        from simorgh.apps.helpdesk import events as _  # noqa: F401
        # Register notification templates.
        from simorgh.apps.helpdesk import notifications as _  # noqa: F401
        # Register global search adapters.
        from simorgh.apps.helpdesk import search as _  # noqa: F401
        # Register helpdesk automation actions in the platform Action Registry.
        from simorgh.apps.helpdesk import automations as _  # noqa: F401
        # Register export specs with the platform export registry.
        from simorgh.apps.helpdesk.import_export import register_export_specs as _register_exports
        _register_exports()
        # Ensure connector models are discoverable by Django migration system.
        from simorgh.apps.helpdesk import connectors as _  # noqa: F401
        # Auto-seed helpdesk defaults when a new tenant is created.
        self._connect_tenant_seed_signal()

    @staticmethod
    def _connect_tenant_seed_signal() -> None:
        from django.db.models.signals import post_save

        def _on_tenant_created(sender, instance, created, **kwargs):  # noqa: ANN001
            if not created:
                return
            try:
                from simorgh.apps.helpdesk.management.commands.seed_helpdesk import seed_tenant_defaults
                seed_tenant_defaults(instance)
            except (ImportError, AttributeError):
                import logging
                logging.getLogger("simorgh.helpdesk").exception(
                    "Auto-seed failed for new tenant %s", getattr(instance, "slug", instance.pk)
                )

        # Import deferred to avoid circular imports at module load time.
        from simorgh.apps.tenants.models import Tenant
        post_save.connect(_on_tenant_created, sender=Tenant, weak=False)
