"""Base Django settings — shared across all environments.

Environment-specific overrides live in `dev.py` and `prod.py`.
All env-var reads MUST go through `env()` to keep a single source of truth.
"""

from __future__ import annotations

from pathlib import Path

import environ
import structlog

# ---------------------------------------------------------------------------
# Paths
# ---------------------------------------------------------------------------
# /backend/config/settings/base.py  →  parents[2] = /backend
BASE_DIR = Path(__file__).resolve().parents[2]
REPO_DIR = BASE_DIR.parent

# ---------------------------------------------------------------------------
# Environment
# ---------------------------------------------------------------------------
env = environ.Env(
    DJANGO_DEBUG=(bool, False),
    DJANGO_ALLOWED_HOSTS=(list, ["localhost", "127.0.0.1", "api.shetab-group.ir", "app.shetab-group.ir"]),
    DJANGO_CORS_ALLOWED_ORIGINS=(list, ["http://localhost:5173", "https://app.shetab-group.ir", "https://api.shetab-group.ir"]),
    DJANGO_LANGUAGE_CODE=(str, "en"),
    DJANGO_TIME_ZONE=(str, "UTC"),
    DJANGO_DATABASE_PATH=(str, str(BASE_DIR / "var" / "db.sqlite3")),
    REDIS_URL=(str, ""),
    CELERY_TASK_ALWAYS_EAGER=(bool, True),
)
env_file = BASE_DIR / ".env"
if env_file.exists():
    environ.Env.read_env(str(env_file))

# ---------------------------------------------------------------------------
# Security
# ---------------------------------------------------------------------------
SECRET_KEY = env("DJANGO_SECRET_KEY", default="dev-insecure-change-me")
DEBUG = env("DJANGO_DEBUG")
ALLOWED_HOSTS = env("DJANGO_ALLOWED_HOSTS")

# ---------------------------------------------------------------------------
# Applications
# ---------------------------------------------------------------------------
DJANGO_APPS = [
    # daphne must be first to override runserver for ASGI/WebSocket dev support.
    "daphne",
    # django-unfold must precede django.contrib.admin to override admin templates.
    "unfold",
    "unfold.contrib.filters",
    "unfold.contrib.forms",
    "unfold.contrib.inlines",
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

THIRD_PARTY_APPS = [
    "rest_framework",
    "corsheaders",
    "django_filters",
    "drf_spectacular",
    "channels",
    "django_celery_beat",
]

LOCAL_APPS = [
    "simorgh.core.apps.CoreConfig",
    "simorgh.apps.accounts.apps.AccountsConfig",
    "simorgh.apps.tenants.apps.TenantsConfig",
    "simorgh.apps.organizations.apps.OrganizationsConfig",
    "simorgh.apps.iam.apps.IamConfig",
    "simorgh.apps.memberships.apps.MembershipsConfig",
    # Phase 3 — core infrastructure.
    "simorgh.apps.audit.apps.AuditConfig",
    "simorgh.apps.events.apps.EventsConfig",
    "simorgh.apps.notifications.apps.NotificationsConfig",
    "simorgh.apps.storage.apps.StorageConfig",
    "simorgh.apps.app_settings.apps.AppSettingsConfig",
    # Phase 4 — metadata + schema engine.
    "simorgh.apps.schema.apps.SchemaConfig",
    # Phase 5 — workflow engine.
    "simorgh.apps.workflow.apps.WorkflowConfig",
    # Phase 6 — module system.
    "simorgh.apps.modules.apps.ModulesConfig",
    # Phase 9 — AI-native layer.
    "simorgh.apps.ai.apps.AIConfig",
    # Phase 10 — workspaces / portals / unified search.
    "simorgh.apps.workspaces.apps.WorkspacesConfig",
    # Phase 11 — cross-cutting generic models (attachments, comments, activity, custom fields).
    "simorgh.apps.platform_core.apps.PlatformCoreConfig",
    # Localization registry (languages, locales, currencies).
    "simorgh.apps.localization.apps.LocalizationConfig",
    # Chat — direct messaging between tenant members.
    "simorgh.apps.chat.apps.ChatConfig",
    # Help Desk — support tickets, queues, SLA, automation.
    "simorgh.apps.helpdesk.apps.HelpdeskConfig",
    # DMS — Document Management System.
    "simorgh.apps.dms.apps.DMSConfig",
    # Phase 3 — Platform-level Automation Engine.
    "simorgh.apps.automation.apps.AutomationConfig",
    # S1 — CRM / Contacts.
    "simorgh.apps.crm.apps.CRMConfig",
    # S1.3 — Calendar & Scheduling.
    "simorgh.apps.calendar.apps.CalendarConfig",
    # S2.2 — Knowledge Base.
    "simorgh.apps.kb.apps.KBConfig",
    # S3.1 — Project Management.
    "simorgh.apps.projects.apps.ProjectsConfig",
    # S3.2 — Task Management.
    "simorgh.apps.tasks.apps.TasksConfig",
    # S3.3 — Time Tracking.
    "simorgh.apps.time_tracking.apps.TimeTrackingConfig",
    # S4.1 — HR Core / Employee Master.
    "simorgh.apps.hr_core.apps.HRCoreConfig",
    # BPM / APQC — Process Classification Framework & BPM engine.
    "simorgh.apps.bpm.apps.BPMConfig",
    # Subscription — feature-based licensing, plan management.
    "simorgh.apps.subscription.apps.SubscriptionConfig",
    # Assignment Engine — cross-module reference/assignment management.
    "simorgh.apps.assignments.apps.AssignmentsConfig",
    # Approval Engine — generic approval management for all modules.
    "simorgh.apps.approval_engine.apps.ApprovalEngineConfig",
    # Workbox — unified inbox aggregating assignments, approvals, tasks, workflow steps, and notifications.
    "simorgh.apps.workbox.apps.WorkboxConfig",
    # SLA Engine — response time and resolution SLA management across all modules.
    "simorgh.apps.sla_engine.apps.SLAEngineConfig",
    # Delegation Engine — central delegation/absence/proxy management.
    "simorgh.apps.delegations.apps.DelegationsConfig",
    # Escalation Engine — cross-module escalation management with time-based, rule-based, hierarchy-based triggers.
    "simorgh.apps.escalation_engine.apps.EscalationEngineConfig",
    # Visualization — views & visualization engine.
    "simorgh.apps.visualization.apps.VisualizationConfig",
    # Reporting Engine — reports, KPI dashboards, scheduled reports, exports.
    "simorgh.apps.reporting.apps.ReportingConfig",
    # Content Engine — Knowledge & Content management (articles, docs, news, FAQs, etc.).
    "simorgh.apps.content.apps.ContentConfig",
    # Catalog Engine — Product/Service/IT/HR/Procurement catalog metadata & discoverability.
    "simorgh.apps.catalog.apps.CatalogConfig",
    # Correspondence — incoming/outgoing letters, memos, announcements, notices.
    "simorgh.apps.correspondence.apps.CorrespondenceConfig",
    # Provisioning Engine — fixture registry, seed/benchmark/snapshot runners, data generation.
    "simorgh.apps.provisioning.apps.ProvisioningConfig",
]

INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS

# Silence pre-existing DMS lazy-reference checks (sub-package models not yet wired to top-level models module).
SILENCED_SYSTEM_CHECKS = ["fields.E307"]

# ---------------------------------------------------------------------------
# Middleware
# ---------------------------------------------------------------------------
MIDDLEWARE = [
    "corsheaders.middleware.CorsMiddleware",
    "django.middleware.security.SecurityMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.locale.LocaleMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
    # Simorgh platform layer — order matters: tenant → context → gate → subscription.
    "simorgh.core.middleware.TenantResolverMiddleware",
    "simorgh.core.middleware.RequestContextMiddleware",
    "simorgh.core.middleware.PermissionGateMiddleware",
    "simorgh.apps.subscription.middleware.SubscriptionCheckMiddleware",
]

# Number of dot-separated parts in the base domain (e.g. `example.com` → 2).
# Used by the subdomain tenant resolver to identify the tenant slug.
TENANT_BASE_DOMAIN_PARTS = env.int("TENANT_BASE_DOMAIN_PARTS", default=2)

# Enable strict scoped-query warnings in DEBUG (off in prod for noise).
SCOPED_QUERY_STRICT = True

ROOT_URLCONF = "config.urls"
WSGI_APPLICATION = "config.wsgi.application"
ASGI_APPLICATION = "config.asgi.application"

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],
        "APP_DIRS": True,
        "OPTIONS": {
            "context_processors": [
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
                "django.template.context_processors.i18n",
            ],
        },
    },
]

# ---------------------------------------------------------------------------
# Database (SQLite — abstracted via platform.core.db for future PostgreSQL)
# ---------------------------------------------------------------------------
_db_path = Path(env("DJANGO_DATABASE_PATH"))
_db_path.parent.mkdir(parents=True, exist_ok=True)
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.sqlite3",
        "NAME": str(_db_path),
        "OPTIONS": {
            # WAL mode improves concurrency for SQLite.
            "init_command": "PRAGMA journal_mode=WAL; PRAGMA foreign_keys=ON;",
            "transaction_mode": "IMMEDIATE",
        },
    }
}

DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"

# ---------------------------------------------------------------------------
# Authentication
# ---------------------------------------------------------------------------
AUTH_USER_MODEL = "accounts.User"

AUTH_PASSWORD_VALIDATORS = [
    {"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"},
    {"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator"},
    {"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
    {"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
]

# ---------------------------------------------------------------------------
# Internationalization (i18n from day one — Rule #1)
# ---------------------------------------------------------------------------
LANGUAGE_CODE = env("DJANGO_LANGUAGE_CODE")
TIME_ZONE = env("DJANGO_TIME_ZONE")
USE_I18N = True
USE_TZ = True

LANGUAGES = [
    ("en", "English"),
    ("fa", "Persian"),
]
LOCALE_PATHS = [BASE_DIR / "locale"]

# ---------------------------------------------------------------------------
# Static & Media
# ---------------------------------------------------------------------------
STATIC_URL = "/static/"
STATIC_ROOT = BASE_DIR / "staticfiles"
STATICFILES_DIRS: list[Path] = []
STORAGES = {
    "default": {"BACKEND": "django.core.files.storage.FileSystemStorage"},
    "staticfiles": {"BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage"},
}

MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / "var" / "media"

# ---------------------------------------------------------------------------
# Storage (Phase 3)
# ---------------------------------------------------------------------------
STORAGE_ROOT = BASE_DIR / "var" / "storage"
STORAGE_MAX_FILE_BYTES = env.int("STORAGE_MAX_FILE_BYTES", default=25 * 1024 * 1024)
STORAGE_ALLOWED_MIMES: list[str] = env.list("STORAGE_ALLOWED_MIMES", default=[])

# ---------------------------------------------------------------------------
# DRF
# ---------------------------------------------------------------------------
REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": [
        "rest_framework.authentication.SessionAuthentication",
    ],
    "DEFAULT_PERMISSION_CLASSES": [
        "rest_framework.permissions.IsAuthenticated",
        "simorgh.apps.iam.permissions.HasPermission",
    ],
    "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
    "PAGE_SIZE": 25,
    "DEFAULT_FILTER_BACKENDS": [
        "django_filters.rest_framework.DjangoFilterBackend",
        "rest_framework.filters.OrderingFilter",
        "rest_framework.filters.SearchFilter",
    ],
    "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
    "EXCEPTION_HANDLER": "simorgh.core.api.exceptions.api_exception_handler",
}

SPECTACULAR_SETTINGS = {
    "TITLE": "Simorgh API",
    "DESCRIPTION": "Simorgh ERP platform API.",
    "VERSION": "0.1.0",
    "SERVE_INCLUDE_SCHEMA": False,
}

# ---------------------------------------------------------------------------
# CORS
# ---------------------------------------------------------------------------
CORS_ALLOWED_ORIGINS = env("DJANGO_CORS_ALLOWED_ORIGINS", "https://app.shetab-group.ir", "https://api.shetab-group.ir")
CORS_ALLOW_CREDENTIALS = True

# Allow the custom X-Tenant header sent by the SPA on every request.
from corsheaders.defaults import default_headers  # noqa: E402

CORS_ALLOW_HEADERS = list(default_headers) + ["x-tenant"]

# CSRF must trust every origin that can POST to this server — that means
# BOTH the SPA origin AND the backend's own host (for the Django admin).
# ``DJANGO_CSRF_TRUSTED_ORIGINS`` should list all full scheme+host values.
# It defaults to CORS origins so existing .env files don't need changing
# for pure-SPA usage, but production .env MUST also include the backend URL.
CSRF_TRUSTED_ORIGINS = env.list(
    "DJANGO_CSRF_TRUSTED_ORIGINS",
    default=list(CORS_ALLOWED_ORIGINS),
)
SESSION_COOKIE_SAMESITE = "Lax"
CSRF_COOKIE_SAMESITE = "Lax"

# Cross-Origin-Opener-Policy: Django SecurityMiddleware sets this to
# "same-origin" by default, but browsers warn when served over plain HTTP.
# We expose it as an env var so HTTP deployments can set it to None.
SECURE_CROSS_ORIGIN_OPENER_POLICY = env(
    "DJANGO_CROSS_ORIGIN_OPENER_POLICY",
    default="same-origin",
) or None

# ---------------------------------------------------------------------------
# Cache (Redis when available, in-memory fallback)
# ---------------------------------------------------------------------------
_redis_url = env("REDIS_URL")
if _redis_url:
    CACHES = {
        "default": {
            "BACKEND": "django.core.cache.backends.redis.RedisCache",
            "LOCATION": _redis_url,
        }
    }
else:
    CACHES = {
        "default": {
            "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
            "LOCATION": "simorgh-locmem",
        }
    }

# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Django Channels — WebSocket / ASGI
# ---------------------------------------------------------------------------
# Use InMemoryChannelLayer when no Redis is configured (dev + test).
# For production, set REDIS_URL and install channels-redis.
try:
    if _redis_url:
        import channels_redis  # noqa: F401
        CHANNEL_LAYERS = {
            "default": {
                "BACKEND": "channels_redis.core.RedisChannelLayer",
                "CONFIG": {"hosts": [_redis_url]},
            }
        }
    else:
        raise ImportError
except ImportError:
    CHANNEL_LAYERS = {
        "default": {
            "BACKEND": "channels.layers.InMemoryChannelLayer",
        }
    }

# ---------------------------------------------------------------------------
# Celery (eager in dev / when no broker)
# ---------------------------------------------------------------------------
CELERY_BROKER_URL = _redis_url or "memory://"
CELERY_RESULT_BACKEND = _redis_url or "cache+memory://"
CELERY_TASK_ALWAYS_EAGER = env("CELERY_TASK_ALWAYS_EAGER")
CELERY_TASK_EAGER_PROPAGATES = True
CELERY_TIMEZONE = TIME_ZONE
CELERY_TASK_ACKS_LATE = True

# ---------------------------------------------------------------------------
# Phase 11 — platform reinforcement flags
# ---------------------------------------------------------------------------
# When True, ``simorgh.apps.events.bus.dispatch_async()`` writes to the
# transactional outbox; otherwise it falls back to synchronous dispatch.
EVENTS_ASYNC_DISPATCH = env.bool("EVENTS_ASYNC_DISPATCH", default=False)

# Dotted path to the active realtime backend.
REALTIME_BACKEND = env("REALTIME_BACKEND", default="simorgh.core.realtime.LoggingRealtimeBackend")

# Dotted path to the active search provider.
SEARCH_PROVIDER = env(
    "SEARCH_PROVIDER",
    default="simorgh.core.search_provider.InMemorySearchProvider",
)

# ---------------------------------------------------------------------------
# django-unfold (admin UI). Branding/text is i18n-friendly via gettext_lazy.
# ---------------------------------------------------------------------------
from django.urls import reverse_lazy  # noqa: E402
from django.utils.translation import gettext_lazy as _u  # noqa: E402

UNFOLD = {
    "SITE_TITLE": _u("Simorgh Admin"),
    "SITE_HEADER": _u("Simorgh"),
    "SITE_SUBHEADER": _u("Enterprise SaaS ERP"),
    "SITE_URL": "/",
    "SHOW_HISTORY": True,
    "SHOW_VIEW_ON_SITE": False,
    "THEME": None,  # let user toggle light/dark
    "COLORS": {
        "primary": {
            "50": "240 249 255",
            "100": "224 242 254",
            "200": "186 230 253",
            "300": "125 211 252",
            "400": "56 189 248",
            "500": "14 165 233",
            "600": "2 132 199",
            "700": "3 105 161",
            "800": "7 89 133",
            "900": "12 74 110",
            "950": "8 47 73",
        },
    },
    "SIDEBAR": {
        "show_search": True,
        "show_all_applications": False,
        "navigation": [
            # ================================================================
            # بخش ۱ — هسته پلتفرم (Platform Core)
            #     انجین‌ها و سرویس‌های زیرساختی پلتفرم
            # ================================================================
            # 1.1 احراز هویت
            {
                "title": _u("احراز هویت"),
                "icon": "lock",
                "separator": True,
                "collapsible": True,
                "items": [
                    {
                        "title": _u("کاربران"),
                        "icon": "person",
                        "link": reverse_lazy("admin:accounts_user_changelist"),
                    },
                    {
                        "title": _u("روش‌های ورود"),
                        "icon": "login",
                        "link": reverse_lazy("admin:accounts_authmethodconfig_changelist"),
                    },
                    {
                        "title": _u("اکتیو دایرکتوری"),
                        "icon": "dns",
                        "link": reverse_lazy("admin:accounts_activedirectoryconfig_changelist"),
                    },
                    {
                        "title": _u("ورود اجتماعی"),
                        "icon": "share",
                        "link": reverse_lazy("admin:accounts_socialauthconfig_changelist"),
                    },
                    {
                        "title": _u("توکن‌های OTP"),
                        "icon": "sms",
                        "link": reverse_lazy("admin:accounts_mobileotptoken_changelist"),
                    },
                    {
                        "title": _u("لاگ ارسال OTP"),
                        "icon": "receipt_long",
                        "link": reverse_lazy("admin:accounts_otpsendlog_changelist"),
                    },
                ],
            },
            # 1.2 نقش‌ها و دسترسی‌ها
            {
                "title": _u("نقش‌ها و دسترسی‌ها"),
                "icon": "shield",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("نقش‌ها"),
                        "icon": "badge",
                        "link": reverse_lazy("admin:iam_role_changelist"),
                    },
                    {
                        "title": _u("مجوزها"),
                        "icon": "key",
                        "link": reverse_lazy("admin:iam_permission_changelist"),
                    },
                    {
                        "title": _u("سیاست‌های ABAC"),
                        "icon": "policy",
                        "link": reverse_lazy("admin:iam_policy_changelist"),
                    },
                ],
            },
            # 1.3 محیط کاری
            {
                "title": _u("محیط کاری"),
                "icon": "workspaces",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("محیط‌های کاری"),
                        "icon": "space_dashboard",
                        "link": reverse_lazy("admin:platform_workspaces_workspace_changelist"),
                    },
                    {
                        "title": _u("عضویت در محیط کاری"),
                        "icon": "manage_accounts",
                        "link": reverse_lazy("admin:platform_workspaces_workspacemembership_changelist"),
                    },
                    {
                        "title": _u("آیتم‌های ناوبری"),
                        "icon": "menu",
                        "link": reverse_lazy("admin:platform_workspaces_navigationitem_changelist"),
                    },
                ],
            },
            # 1.4 چت
            {
                "title": _u("چت"),
                "icon": "chat",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("مکالمات مستقیم"),
                        "icon": "forum",
                        "link": reverse_lazy("admin:chat_directconversation_changelist"),
                    },
                    {
                        "title": _u("پیام‌های مستقیم"),
                        "icon": "message",
                        "link": reverse_lazy("admin:chat_directmessage_changelist"),
                    },
                    {
                        "title": _u("گفتگوهای گروهی"),
                        "icon": "groups",
                        "link": reverse_lazy("admin:chat_groupconversation_changelist"),
                    },
                    {
                        "title": _u("اعضای گروه"),
                        "icon": "group_add",
                        "link": reverse_lazy("admin:chat_groupmember_changelist"),
                    },
                    {
                        "title": _u("پیام‌های گروهی"),
                        "icon": "textsms",
                        "link": reverse_lazy("admin:chat_groupmessage_changelist"),
                    },
                ],
            },
            # 1.5 موتور فرایند (Workflow Engine)
            {
                "title": _u("موتور فرایند"),
                "icon": "flowsheet",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("تعریف فرایند"),
                        "icon": "description",
                        "link": reverse_lazy("admin:platform_workflow_processdefinition_changelist"),
                    },
                    {
                        "title": _u("نمونه‌های فرایند"),
                        "icon": "play_circle",
                        "link": reverse_lazy("admin:platform_workflow_workflowinstance_changelist"),
                    },
                    {
                        "title": _u("لاگ انتقال"),
                        "icon": "swap_horiz",
                        "link": reverse_lazy("admin:platform_workflow_workflowtransitionlog_changelist"),
                    },
                    {
                        "title": _u("تاییدیه‌ها"),
                        "icon": "approval",
                        "link": reverse_lazy("admin:platform_workflow_workflowapproval_changelist"),
                    },
                    {
                        "title": _u("لاگ اجرای فرایند"),
                        "icon": "history",
                        "link": reverse_lazy("admin:platform_workflow_processexecutionlog_changelist"),
                    },
                ],
            },
            # 1.6 موتور تاییدات (Approval Engine)
            {
                "title": _u("موتور تاییدات"),
                "icon": "approval",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("درخواست‌های تایید"),
                        "icon": "fact_check",
                        "link": reverse_lazy("admin:approval_engine_approvalrequest_changelist"),
                    },
                    {
                        "title": _u("مراحل تایید"),
                        "icon": "checklist",
                        "link": reverse_lazy("admin:approval_engine_approvalstep_changelist"),
                    },
                    {
                        "title": _u("ماتریس‌های تایید"),
                        "icon": "table_chart",
                        "link": reverse_lazy("admin:approval_engine_approvalmatrix_changelist"),
                    },
                    {
                        "title": _u("پیکربندی تاییدکنندگان"),
                        "icon": "settings_applications",
                        "link": reverse_lazy("admin:approval_engine_matrixapproverconfig_changelist"),
                    },
                ],
            },
            # 1.7 موتور SLA
            {
                "title": _u("موتور SLA"),
                "icon": "schedule",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("سیاست‌های SLA"),
                        "icon": "policy",
                        "link": reverse_lazy("admin:sla_engine_slapolicy_changelist"),
                    },
                    {
                        "title": _u("تایمرهای SLA"),
                        "icon": "timer",
                        "link": reverse_lazy("admin:sla_engine_slatimer_changelist"),
                    },
                    {
                        "title": _u("تخطی‌های SLA"),
                        "icon": "warning",
                        "link": reverse_lazy("admin:sla_engine_slabreach_changelist"),
                    },
                ],
            },
            # 1.8 موتور تشدید (Escalation Engine)
            {
                "title": _u("موتور تشدید"),
                "icon": "escalator_warning",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("قوانین تشدید"),
                        "icon": "rule",
                        "link": reverse_lazy("admin:escalation_engine_escalationrule_changelist"),
                    },
                    {
                        "title": _u("موارد تشدید"),
                        "icon": "trending_up",
                        "link": reverse_lazy("admin:escalation_engine_escalationinstance_changelist"),
                    },
                    {
                        "title": _u("لاگ تشدید"),
                        "icon": "history",
                        "link": reverse_lazy("admin:escalation_engine_escalationlog_changelist"),
                    },
                ],
            },
            # 1.9 موتور اعلان‌ها (Notification Engine)
            {
                "title": _u("موتور اعلان‌ها"),
                "icon": "notifications",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("اعلان‌ها"),
                        "icon": "notification_important",
                        "link": reverse_lazy("admin:notifications_notification_changelist"),
                    },
                    {
                        "title": _u("ارائه‌دهندگان پیامک"),
                        "icon": "sms",
                        "link": reverse_lazy("admin:notifications_smsprovider_changelist"),
                    },
                    {
                        "title": _u("لاگ ارسال پیامک"),
                        "icon": "receipt_long",
                        "link": reverse_lazy("admin:notifications_smsdeliverylog_changelist"),
                    },
                    {
                        "title": _u("محدودیت نرخ پیامک"),
                        "icon": "speed",
                        "link": reverse_lazy("admin:notifications_tenantsmsratelimit_changelist"),
                    },
                ],
            },
            # 1.10 هوش مصنوعی (AI Engine)
            {
                "title": _u("هوش مصنوعی"),
                "icon": "smart_toy",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("پیشنهادات"),
                        "icon": "lightbulb",
                        "link": reverse_lazy("admin:platform_ai_aisuggestion_changelist"),
                    },
                    {
                        "title": _u("لاگ عملیات"),
                        "icon": "manage_history",
                        "link": reverse_lazy("admin:platform_ai_aiactionlog_changelist"),
                    },
                    {
                        "title": _u("تاییدیه‌های AI"),
                        "icon": "rate_review",
                        "link": reverse_lazy("admin:platform_ai_aiapproval_changelist"),
                    },
                ],
            },
            # 1.11 ذخیره‌سازی و رویدادها
            {
                "title": _u("ذخیره‌سازی و رویدادها"),
                "icon": "storage",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("فایل‌ها"),
                        "icon": "folder",
                        "link": reverse_lazy("admin:storage_filemetadata_changelist"),
                    },
                    {
                        "title": _u("صف رویدادها"),
                        "icon": "queue",
                        "link": reverse_lazy("admin:events_eventoutboxentry_changelist"),
                    },
                ],
            },
            # 1.12 محتوای مشترک پلتفرم
            {
                "title": _u("محتوای مشترک پلتفرم"),
                "icon": "layers",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("پیوست‌ها"),
                        "icon": "attach_file",
                        "link": reverse_lazy("admin:platform_core_attachment_changelist"),
                    },
                    {
                        "title": _u("نظرات"),
                        "icon": "comment",
                        "link": reverse_lazy("admin:platform_core_comment_changelist"),
                    },
                    {
                        "title": _u("فعالیت‌ها"),
                        "icon": "timeline",
                        "link": reverse_lazy("admin:platform_core_activity_changelist"),
                    },
                    {
                        "title": _u("فیلدهای سفارشی (تعریف)"),
                        "icon": "dataset",
                        "link": reverse_lazy("admin:platform_core_customfielddefinition_changelist"),
                    },
                    {
                        "title": _u("فیلدهای سفارشی (مقادیر)"),
                        "icon": "input",
                        "link": reverse_lazy("admin:platform_core_customfieldvalue_changelist"),
                    },
                    {
                        "title": _u("تعریف فرم"),
                        "icon": "dynamic_form",
                        "link": reverse_lazy("admin:platform_core_formdefinition_changelist"),
                    },
                    {
                        "title": _u("تقدیم فرم"),
                        "icon": "send",
                        "link": reverse_lazy("admin:platform_core_formsubmission_changelist"),
                    },
                    {
                        "title": _u("الگوی چاپ"),
                        "icon": "print",
                        "link": reverse_lazy("admin:platform_core_printtemplate_changelist"),
                    },
                    {
                        "title": _u("الگوی پیام"),
                        "icon": "mail",
                        "link": reverse_lazy("admin:platform_core_messagetemplate_changelist"),
                    },
                    {
                        "title": _u("دنباله شماره مرجع"),
                        "icon": "tag",
                        "link": reverse_lazy("admin:platform_core_referencenumbersequence_changelist"),
                    },
                    {
                        "title": _u("کار درون‌ریزی"),
                        "icon": "file_upload",
                        "link": reverse_lazy("admin:platform_core_importjob_changelist"),
                    },
                    {
                        "title": _u("کار برون‌ریزی"),
                        "icon": "file_download",
                        "link": reverse_lazy("admin:platform_core_exportjob_changelist"),
                    },
                ],
            },
            # 1.13 بومی‌سازی
            {
                "title": _u("بومی‌سازی"),
                "icon": "language",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("زبان‌ها"),
                        "icon": "translate",
                        "link": reverse_lazy("admin:localization_language_changelist"),
                    },
                    {
                        "title": _u("لوکال‌ها"),
                        "icon": "public",
                        "link": reverse_lazy("admin:localization_locale_changelist"),
                    },
                    {
                        "title": _u("ارزها"),
                        "icon": "payments",
                        "link": reverse_lazy("admin:localization_currency_changelist"),
                    },
                    {
                        "title": _u("کشورها"),
                        "icon": "flag",
                        "link": reverse_lazy("admin:localization_country_changelist"),
                    },
                    {
                        "title": _u("منطقه‌های زمانی"),
                        "icon": "schedule",
                        "link": reverse_lazy("admin:localization_timezone_changelist"),
                    },
                ],
            },
            # 1.14 تقویم
            {
                "title": _u("تقویم"),
                "icon": "calendar_month",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("رویدادها"),
                        "icon": "event",
                        "link": reverse_lazy("admin:cal_calendarevent_changelist"),
                    },
                    {
                        "title": _u("شرکت‌کنندگان"),
                        "icon": "group",
                        "link": reverse_lazy("admin:cal_eventattendee_changelist"),
                    },
                ],
            },
            # 1.15 گزارش‌ها و داشبوردها
            {
                "title": _u("گزارش‌ها و داشبوردها"),
                "icon": "monitoring",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("تعریف گزارش"),
                        "icon": "description",
                        "link": reverse_lazy("admin:reporting_reportdefinition_changelist"),
                    },
                    {
                        "title": _u("گزارش‌های زمان‌بندی‌شده"),
                        "icon": "schedule_send",
                        "link": reverse_lazy("admin:reporting_scheduledreport_changelist"),
                    },
                    {
                        "title": _u("اجرای گزارش"),
                        "icon": "play_arrow",
                        "link": reverse_lazy("admin:reporting_reportexecution_changelist"),
                    },
                    {
                        "title": _u("تعریف KPI"),
                        "icon": "trending_up",
                        "link": reverse_lazy("admin:reporting_kpidefinition_changelist"),
                    },
                    {
                        "title": _u("تعریف داشبورد"),
                        "icon": "dashboard",
                        "link": reverse_lazy("admin:reporting_dashboarddefinition_changelist"),
                    },
                ],
            },
            # 1.16 ممیزی
            {
                "title": _u("ممیزی"),
                "icon": "fact_check",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("لاگ‌های ممیزی"),
                        "icon": "history",
                        "link": reverse_lazy("admin:audit_auditlog_changelist"),
                    },
                ],
            },
            # 1.17 تنظیمات اپ
            {
                "title": _u("تنظیمات اپ"),
                "icon": "settings",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("مقادیر تنظیمات"),
                        "icon": "tune",
                        "link": reverse_lazy("admin:app_settings_settingvalue_changelist"),
                    },
                ],
            },
            # ================================================================
            # بخش ۲ — هسته بیزنس (Business Core)
            #     ماژول‌ها / فیچرها / اشتراک / پلن / تننت / کاربران
            # ================================================================
            # 2.1 کاربران و تنانت‌ها
            {
                "title": _u("کاربران و تنانت‌ها"),
                "icon": "people",
                "separator": True,
                "collapsible": True,
                "items": [
                    {
                        "title": _u("کاربران"),
                        "icon": "person",
                        "link": reverse_lazy("admin:accounts_user_changelist"),
                    },
                    {
                        "title": _u("تنانت‌ها"),
                        "icon": "business",
                        "link": reverse_lazy("admin:tenants_tenant_changelist"),
                    },
                ],
            },
            # 2.2 سازمان‌ها
            {
                "title": _u("سازمان‌ها"),
                "icon": "corporate_fare",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("گره‌های سازمانی"),
                        "icon": "account_tree",
                        "link": reverse_lazy("admin:organizations_organizationnode_changelist"),
                    },
                    {
                        "title": _u("عضویت‌ها"),
                        "icon": "group_add",
                        "link": reverse_lazy("admin:memberships_membership_changelist"),
                    },
                ],
            },
            # 2.3 ماژول‌ها و فیچرها
            {
                "title": _u("ماژول‌ها و فیچرها"),
                "icon": "extension",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("دامنه‌ها"),
                        "icon": "domain",
                        "link": reverse_lazy("admin:platform_modules_domain_changelist"),
                    },
                    {
                        "title": _u("قابلیت‌ها"),
                        "icon": "settings_ethernet",
                        "link": reverse_lazy("admin:platform_modules_capability_changelist"),
                    },
                    {
                        "title": _u("کاتالوگ فیچرها"),
                        "icon": "star",
                        "link": reverse_lazy("admin:platform_modules_featurecatalog_changelist"),
                    },
                    {
                        "title": _u("استحقاق ویژگی"),
                        "icon": "verified",
                        "link": reverse_lazy("admin:platform_modules_featureentitlement_changelist"),
                    },
                    {
                        "title": _u("ماژول‌های تنانت"),
                        "icon": "deployed_code",
                        "link": reverse_lazy("admin:platform_modules_tenantmodule_changelist"),
                    },
                    {
                        "title": _u("کاتالوگ ماژول‌ها"),
                        "icon": "grid_view",
                        "link": reverse_lazy("admin:platform_modules_modulecatalog_changelist"),
                    },
                    {
                        "title": _u("فلگ‌های ویژگی"),
                        "icon": "flag",
                        "link": reverse_lazy("admin:platform_modules_tenantfeatureoverride_changelist"),
                    },
                ],
            },
            # 2.4 اشتراک و لایسنسینگ
            {
                "title": _u("اشتراک و لایسنسینگ"),
                "icon": "workspace_premium",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("پلن‌های پلتفرم"),
                        "icon": "price_change",
                        "link": reverse_lazy("admin:subscription_platformplan_changelist"),
                    },
                    {
                        "title": _u("اشتراک تنانت‌ها"),
                        "icon": "subscriptions",
                        "link": reverse_lazy("admin:subscription_tenantsubscription_changelist"),
                    },
                    {
                        "title": _u("افزونه‌های خریداری‌شده"),
                        "icon": "add_circle",
                        "link": reverse_lazy("admin:subscription_tenantaddonfeature_changelist"),
                    },
                ],
            },
            # ================================================================
            # بخش ۳ — اپلیکیشن‌ها (Applications)
            #     ماژول‌های کسب‌وکاری
            # ================================================================
            # 3.1 کارتابل
            {
                "title": _u("کارتابل"),
                "icon": "inbox",
                "separator": True,
                "collapsible": True,
                "items": [
                    {
                        "title": _u("آیتم‌های کار"),
                        "icon": "inbox",
                        "link": reverse_lazy("admin:workbox_workitem_changelist"),
                    },
                    {
                        "title": _u("جدول زمانی"),
                        "icon": "timeline",
                        "link": reverse_lazy("admin:workbox_workitemtimeline_changelist"),
                    },
                ],
            },
            # 3.2 هلپ‌دسک
            {
                "title": _u("هلپ‌دسک"),
                "icon": "support_agent",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("تیکت‌ها"),
                        "icon": "confirmation_number",
                        "link": reverse_lazy("admin:helpdesk_ticket_changelist"),
                    },
                    {
                        "title": _u("پاسخ‌ها"),
                        "icon": "reply",
                        "link": reverse_lazy("admin:helpdesk_ticketreply_changelist"),
                    },
                    {
                        "title": _u("صف‌ها"),
                        "icon": "list_alt",
                        "link": reverse_lazy("admin:helpdesk_queue_changelist"),
                    },
                    {
                        "title": _u("دسته‌بندی‌ها"),
                        "icon": "category",
                        "link": reverse_lazy("admin:helpdesk_category_changelist"),
                    },
                    {
                        "title": _u("تگ‌ها"),
                        "icon": "label",
                        "link": reverse_lazy("admin:helpdesk_tag_changelist"),
                    },
                    {
                        "title": _u("سیاست‌های SLA"),
                        "icon": "schedule",
                        "link": reverse_lazy("admin:helpdesk_slapolicy_changelist"),
                    },
                    {
                        "title": _u("خودکارسازی‌ها"),
                        "icon": "smart_button",
                        "link": reverse_lazy("admin:helpdesk_automation_changelist"),
                    },
                    {
                        "title": _u("تیم‌های پشتیبانی"),
                        "icon": "diversity_3",
                        "link": reverse_lazy("admin:helpdesk_agentteam_changelist"),
                    },
                ],
            },
            # 3.3 مدیریت فرایندهای کسب‌وکار (BPM)
            {
                "title": _u("BPM"),
                "icon": "account_tree",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("چارچوب PCF"),
                        "icon": "category",
                        "link": reverse_lazy("admin:bpm_pcfframework_changelist"),
                    },
                    {
                        "title": _u("عناصر PCF"),
                        "icon": "list_alt",
                        "link": reverse_lazy("admin:bpm_pcfelement_changelist"),
                    },
                    {
                        "title": _u("معیارهای PCF"),
                        "icon": "speed",
                        "link": reverse_lazy("admin:bpm_pcfmetric_changelist"),
                    },
                    {
                        "title": _u("تعریف فرایند"),
                        "icon": "description",
                        "link": reverse_lazy("admin:bpm_processdefinition_changelist"),
                    },
                    {
                        "title": _u("مالکیت فرایند"),
                        "icon": "admin_panel_settings",
                        "link": reverse_lazy("admin:bpm_processownership_changelist"),
                    },
                    {
                        "title": _u("اسناد فرایند"),
                        "icon": "folder",
                        "link": reverse_lazy("admin:bpm_processdocument_changelist"),
                    },
                    {
                        "title": _u("داده‌های فرایند"),
                        "icon": "dataset",
                        "link": reverse_lazy("admin:bpm_processdataitem_changelist"),
                    },
                    {
                        "title": _u("ورودی/خروجی"),
                        "icon": "swap_horiz",
                        "link": reverse_lazy("admin:bpm_processio_changelist"),
                    },
                    {
                        "title": _u("مراحل عملیاتی"),
                        "icon": "checklist",
                        "link": reverse_lazy("admin:bpm_processoperationalstep_changelist"),
                    },
                    {
                        "title": _u("نقش‌های فرایند"),
                        "icon": "badge",
                        "link": reverse_lazy("admin:bpm_processrole_changelist"),
                    },
                    {
                        "title": _u("قوانین فرایند"),
                        "icon": "rule",
                        "link": reverse_lazy("admin:bpm_processrule_changelist"),
                    },
                    {
                        "title": _u("نقاط کنترل"),
                        "icon": "gpp_bad",
                        "link": reverse_lazy("admin:bpm_processcontrolpoint_changelist"),
                    },
                    {
                        "title": _u("ماتریس RACI"),
                        "icon": "table_chart",
                        "link": reverse_lazy("admin:bpm_racimatrix_changelist"),
                    },
                    {
                        "title": _u("مدخل RACI"),
                        "icon": "edit_note",
                        "link": reverse_lazy("admin:bpm_racientry_changelist"),
                    },
                    {
                        "title": _u("KPI فرایند"),
                        "icon": "trending_up",
                        "link": reverse_lazy("admin:bpm_processkpi_changelist"),
                    },
                    {
                        "title": _u("اندازه‌گیری KPI"),
                        "icon": "analytics",
                        "link": reverse_lazy("admin:bpm_processkpimeasurement_changelist"),
                    },
                    {
                        "title": _u("هشدار KPI"),
                        "icon": "notifications_active",
                        "link": reverse_lazy("admin:bpm_kpialert_changelist"),
                    },
                    {
                        "title": _u("نمونه فرایند"),
                        "icon": "play_circle",
                        "link": reverse_lazy("admin:bpm_processinstance_changelist"),
                    },
                    {
                        "title": _u("مرحله نمونه"),
                        "icon": "view_list",
                        "link": reverse_lazy("admin:bpm_processinstancestep_changelist"),
                    },
                    {
                        "title": _u("بررسی قوانین"),
                        "icon": "gavel",
                        "link": reverse_lazy("admin:bpm_processinstancerulecheck_changelist"),
                    },
                    {
                        "title": _u("اجرای نقطه کنترل"),
                        "icon": "playlist_add_check",
                        "link": reverse_lazy("admin:bpm_controlpointexecution_changelist"),
                    },
                    {
                        "title": _u("معیار APQC"),
                        "icon": "bar_chart",
                        "link": reverse_lazy("admin:bpm_apqcbenchmark_changelist"),
                    },
                    {
                        "title": _u("مقایسه معیار"),
                        "icon": "compare",
                        "link": reverse_lazy("admin:bpm_orgbenchmarkcomparison_changelist"),
                    },
                    {
                        "title": _u("سطح بلوغ"),
                        "icon": "stairs",
                        "link": reverse_lazy("admin:bpm_maturitylevel_changelist"),
                    },
                    {
                        "title": _u("ارزیابی بلوغ"),
                        "icon": "assessment",
                        "link": reverse_lazy("admin:bpm_processmaturityassessment_changelist"),
                    },
                    {
                        "title": _u("اقدام بهبود"),
                        "icon": "upgrade",
                        "link": reverse_lazy("admin:bpm_maturityimprovementaction_changelist"),
                    },
                ],
            },
            # 3.4 CRM
            {
                "title": _u("CRM"),
                "icon": "contacts",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("مخاطبان"),
                        "icon": "person",
                        "link": reverse_lazy("admin:crm_contact_changelist"),
                    },
                    {
                        "title": _u("برچسب مخاطب"),
                        "icon": "label",
                        "link": reverse_lazy("admin:crm_contacttag_changelist"),
                    },
                ],
            },
            # 3.5 مدیریت پروژه
            {
                "title": _u("مدیریت پروژه"),
                "icon": "work",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("پروژه‌ها"),
                        "icon": "work",
                        "link": reverse_lazy("admin:projects_project_changelist"),
                    },
                    {
                        "title": _u("برچسب پروژه"),
                        "icon": "label",
                        "link": reverse_lazy("admin:projects_projecttag_changelist"),
                    },
                ],
            },
            # 3.6 مدیریت تسک
            {
                "title": _u("مدیریت تسک"),
                "icon": "checklist",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("تکالیف"),
                        "icon": "assignment",
                        "link": reverse_lazy("admin:tasks_task_changelist"),
                    },
                    {
                        "title": _u("برچسب تکلیف"),
                        "icon": "label",
                        "link": reverse_lazy("admin:tasks_tasktag_changelist"),
                    },
                    {
                        "title": _u("پیوست تکلیف"),
                        "icon": "attach_file",
                        "link": reverse_lazy("admin:tasks_taskattachment_changelist"),
                    },
                    {
                        "title": _u("ناظران"),
                        "icon": "visibility",
                        "link": reverse_lazy("admin:tasks_taskwatcher_changelist"),
                    },
                ],
            },
            # 3.7 پایگاه دانش
            {
                "title": _u("پایگاه دانش"),
                "icon": "menu_book",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("مقالات"),
                        "icon": "article",
                        "link": reverse_lazy("admin:kb_kbarticle_changelist"),
                    },
                    {
                        "title": _u("دسته‌بندی‌ها"),
                        "icon": "category",
                        "link": reverse_lazy("admin:kb_kbcategory_changelist"),
                    },
                ],
            },
            # 3.8 منابع انسانی
            {
                "title": _u("منابع انسانی"),
                "icon": "badge",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("کارمندان"),
                        "icon": "person",
                        "link": reverse_lazy("admin:hr_core_employee_changelist"),
                    },
                    {
                        "title": _u("عناوین شغلی"),
                        "icon": "work",
                        "link": reverse_lazy("admin:hr_core_jobtitle_changelist"),
                    },
                    {
                        "title": _u("انواع مرخصی"),
                        "icon": "beach_access",
                        "link": reverse_lazy("admin:hr_core_leavetype_changelist"),
                    },
                    {
                        "title": _u("تعطیلات عمومی"),
                        "icon": "event",
                        "link": reverse_lazy("admin:hr_core_publicholiday_changelist"),
                    },
                    {
                        "title": _u("موجودی مرخصی"),
                        "icon": "account_balance_wallet",
                        "link": reverse_lazy("admin:hr_core_leavebalance_changelist"),
                    },
                    {
                        "title": _u("درخواست مرخصی"),
                        "icon": "edit_calendar",
                        "link": reverse_lazy("admin:hr_core_leaverequest_changelist"),
                    },
                    {
                        "title": _u("تعریف شیفت"),
                        "icon": "schedule",
                        "link": reverse_lazy("admin:hr_core_shiftdefinition_changelist"),
                    },
                    {
                        "title": _u("شیفت کارمند"),
                        "icon": "swap_horiz",
                        "link": reverse_lazy("admin:hr_core_employeeshift_changelist"),
                    },
                    {
                        "title": _u("سوابق حضور"),
                        "icon": "history",
                        "link": reverse_lazy("admin:hr_core_attendancerecord_changelist"),
                    },
                ],
            },
            # 3.9 مکاتبات
            {
                "title": _u("مکاتبات"),
                "icon": "mail",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("نامه‌ها"),
                        "icon": "description",
                        "link": reverse_lazy("admin:correspondence_letter_changelist"),
                    },
                    {
                        "title": _u("پیوست نامه"),
                        "icon": "attach_file",
                        "link": reverse_lazy("admin:correspondence_letterattachment_changelist"),
                    },
                    {
                        "title": _u("گیرندگان"),
                        "icon": "people",
                        "link": reverse_lazy("admin:correspondence_letterrecipient_changelist"),
                    },
                    {
                        "title": _u("الگوی نامه"),
                        "icon": "description",
                        "link": reverse_lazy("admin:correspondence_lettertemplate_changelist"),
                    },
                    {
                        "title": _u("الگوی سرسخت"),
                        "icon": "article",
                        "link": reverse_lazy("admin:correspondence_letterheadtemplate_changelist"),
                    },
                    {
                        "title": _u("الگوی شماره‌گذاری"),
                        "icon": "tag",
                        "link": reverse_lazy("admin:correspondence_numberingtemplate_changelist"),
                    },
                    {
                        "title": _u("دسته‌بندی‌ها"),
                        "icon": "category",
                        "link": reverse_lazy("admin:correspondence_category_changelist"),
                    },
                ],
            },
            # 3.10 مدیریت محتوا
            {
                "title": _u("مدیریت محتوا"),
                "icon": "newspaper",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("موارد محتوا"),
                        "icon": "article",
                        "link": reverse_lazy("admin:content_contentitem_changelist"),
                    },
                    {
                        "title": _u("دسته‌بندی محتوا"),
                        "icon": "category",
                        "link": reverse_lazy("admin:content_contentcategory_changelist"),
                    },
                ],
            },
            # 3.11 کاتالوگ
            {
                "title": _u("کاتالوگ"),
                "icon": "storefront",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("موارد کاتالوگ"),
                        "icon": "inventory_2",
                        "link": reverse_lazy("admin:catalog_catalogitem_changelist"),
                    },
                    {
                        "title": _u("دسته‌بندی کاتالوگ"),
                        "icon": "category",
                        "link": reverse_lazy("admin:catalog_catalogcategory_changelist"),
                    },
                ],
            },
            # 3.12 تفویض اختیار
            {
                "title": _u("تفویض اختیار"),
                "icon": "supervisor_account",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("قوانین تفویض"),
                        "icon": "rule",
                        "link": reverse_lazy("admin:delegations_delegationrule_changelist"),
                    },
                    {
                        "title": _u("لاگ تفویض"),
                        "icon": "history",
                        "link": reverse_lazy("admin:delegations_delegationlog_changelist"),
                    },
                ],
            },
            # 3.13 ردیابی زمان
            {
                "title": _u("ردیابی زمان"),
                "icon": "timer",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("ورودی‌های زمانی"),
                        "icon": "more_time",
                        "link": reverse_lazy("admin:time_tracking_timeentry_changelist"),
                    },
                ],
            },
            # 3.14 ارجاعات
            {
                "title": _u("ارجاعات"),
                "icon": "assignment_ind",
                "collapsible": True,
                "items": [
                    {
                        "title": _u("ارجاعات"),
                        "icon": "assignment",
                        "link": reverse_lazy("admin:assignments_assignment_changelist"),
                    },
                    {
                        "title": _u("برچسب‌ها"),
                        "icon": "label",
                        "link": reverse_lazy("admin:assignments_assignmenttag_changelist"),
                    },
                ],
            },
        ],
    },
}

# ---------------------------------------------------------------------------
# Logging (structured)
# ---------------------------------------------------------------------------
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "json": {
            "()": "structlog.stdlib.ProcessorFormatter",
            "processor": structlog.processors.JSONRenderer(),
        },
        "console": {
            "()": "structlog.stdlib.ProcessorFormatter",
            "processor": structlog.dev.ConsoleRenderer(colors=True),
        },
    },
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "console",
        },
    },
    "root": {"handlers": ["console"], "level": "INFO"},
    "loggers": {
        "django": {"handlers": ["console"], "level": "INFO", "propagate": False},
        "simorgh": {"handlers": ["console"], "level": "DEBUG", "propagate": False},
    },
}

structlog.configure(
    processors=[
        structlog.contextvars.merge_contextvars,
        structlog.processors.add_log_level,
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.stdlib.ProcessorFormatter.wrap_for_formatter,
    ],
    logger_factory=structlog.stdlib.LoggerFactory(),
    cache_logger_on_first_use=True,
)
