"""Helpdesk IAM permission definitions.

All permissions follow the ``<app_label>.<action>_<model>`` convention so
they integrate naturally with Django's built-in permission system and the
platform's RBAC engine.

The role definitions here are *suggestions* for default data fixtures;
actual role creation lives in ``fixtures/helpdesk_roles.json``.
"""

from __future__ import annotations

# ---------------------------------------------------------------------------
# IAM registry — called from HelpdeskConfig.ready()
# ---------------------------------------------------------------------------

def register_all() -> None:
    """Register all helpdesk permissions into the IAM registry."""
    from simorgh.apps.iam.registry import register_permission

    # ── Ticket ──────────────────────────────────────────────────────────────
    register_permission("helpdesk.ticket.view",   label="مشاهده تیکت‌ها",      description="View tickets in the helpdesk.")
    register_permission("helpdesk.ticket.add",    label="ایجاد تیکت",           description="Create new tickets.")
    register_permission("helpdesk.ticket.change", label="ویرایش تیکت",          description="Edit ticket fields (title, priority, etc.).")
    register_permission("helpdesk.ticket.delete", label="حذف تیکت",             description="Soft-delete tickets.")
    register_permission("helpdesk.ticket.assign", label="تخصیص تیکت",          description="Assign ticket to an agent or queue.")
    register_permission("helpdesk.ticket.close",  label="بستن/حل تیکت",        description="Mark a ticket as solved or closed.")
    register_permission("helpdesk.ticket.reopen", label="بازگشایی تیکت",       description="Reopen a solved/closed ticket.")
    register_permission("helpdesk.ticket.merge",  label="ادغام تیکت‌ها",       description="Merge two tickets together.")

    # ── Reply / Note ─────────────────────────────────────────────────────────
    register_permission("helpdesk.reply.view",    label="مشاهده پاسخ‌ها",      description="View public replies on tickets.")
    register_permission("helpdesk.reply.add",     label="افزودن پاسخ",          description="Post a public reply to a ticket.")
    register_permission("helpdesk.reply.change",  label="ویرایش پاسخ",          description="Edit an existing reply.")
    register_permission("helpdesk.reply.delete",  label="حذف پاسخ",             description="Delete a reply.")
    register_permission("helpdesk.reply.note",    label="یادداشت داخلی",        description="Post an internal (agent-only) note.")

    # ── Queue ────────────────────────────────────────────────────────────────
    register_permission("helpdesk.queue.view",    label="مشاهده صف‌ها",         description="View helpdesk queues.")
    register_permission("helpdesk.queue.add",     label="ایجاد صف",             description="Create a new queue.")
    register_permission("helpdesk.queue.change",  label="ویرایش صف",            description="Edit queue settings.")
    register_permission("helpdesk.queue.delete",  label="حذف صف",               description="Delete a queue.")

    # ── Category ─────────────────────────────────────────────────────────────
    register_permission("helpdesk.category.view",   label="مشاهده دسته‌بندی‌ها", description="View ticket categories.")
    register_permission("helpdesk.category.add",    label="ایجاد دسته‌بندی",     description="Create a new category.")
    register_permission("helpdesk.category.change", label="ویرایش دسته‌بندی",    description="Edit categories.")
    register_permission("helpdesk.category.delete", label="حذف دسته‌بندی",       description="Delete categories.")

    # ── Tag ──────────────────────────────────────────────────────────────────
    register_permission("helpdesk.tag.view",    label="مشاهده برچسب‌ها",       description="View tags.")
    register_permission("helpdesk.tag.add",     label="ایجاد برچسب",            description="Create new tags.")
    register_permission("helpdesk.tag.change",  label="ویرایش برچسب",           description="Edit tags.")
    register_permission("helpdesk.tag.delete",  label="حذف برچسب",              description="Delete tags.")

    # ── SLA Policy ───────────────────────────────────────────────────────────
    register_permission("helpdesk.sla.view",    label="مشاهده SLA",             description="View SLA policies.")
    register_permission("helpdesk.sla.add",     label="ایجاد SLA",              description="Create SLA policies.")
    register_permission("helpdesk.sla.change",  label="ویرایش SLA",             description="Edit SLA policies.")
    register_permission("helpdesk.sla.delete",  label="حذف SLA",                description="Delete SLA policies.")

    # ── Automation ───────────────────────────────────────────────────────────
    register_permission("helpdesk.automation.view",    label="مشاهده اتوماسیون‌ها", description="View automation rules.")
    register_permission("helpdesk.automation.add",     label="ایجاد اتوماسیون",      description="Create automation rules.")
    register_permission("helpdesk.automation.change",  label="ویرایش اتوماسیون",     description="Edit automation rules.")
    register_permission("helpdesk.automation.delete",  label="حذف اتوماسیون",        description="Delete automation rules.")

    # ── Team ────────────────────────────────────────────────────────────────
    register_permission("helpdesk.team.view",    label="مشاهده تیم‌ها",        description="View agent teams.")
    register_permission("helpdesk.team.add",     label="ایجاد تیم",             description="Create agent teams.")
    register_permission("helpdesk.team.change",  label="ویرایش تیم",            description="Edit agent teams.")
    register_permission("helpdesk.team.delete",  label="حذف تیم",               description="Delete agent teams.")

    # ── Reports ──────────────────────────────────────────────────────────────
    register_permission("helpdesk.report.view", label="مشاهده گزارش‌ها",        description="View helpdesk reports and analytics.")

    # ── AI ───────────────────────────────────────────────────────────────────
    from simorgh.apps.helpdesk.ai.iam_permissions import register_all as register_ai_perms
    register_ai_perms()


# ---------------------------------------------------------------------------
# Logical permission codenames used across views / templates.
# Keep in sync with any explicit ``Permission`` objects seeded in fixtures.

PERM_TICKET_VIEW   = "helpdesk.ticket.view"
PERM_TICKET_CREATE = "helpdesk.ticket.add"
PERM_TICKET_CHANGE = "helpdesk.ticket.change"
PERM_TICKET_DELETE = "helpdesk.ticket.delete"

PERM_REPLY_VIEW    = "helpdesk.reply.view"
PERM_REPLY_ADD     = "helpdesk.reply.add"
PERM_REPLY_CHANGE  = "helpdesk.reply.change"

PERM_QUEUE_VIEW    = "helpdesk.queue.view"
PERM_QUEUE_MANAGE  = "helpdesk.queue.change"

PERM_CATEGORY_MANAGE = "helpdesk.category.change"
PERM_TAG_MANAGE      = "helpdesk.tag.change"
PERM_SLA_MANAGE      = "helpdesk.sla.change"
PERM_AUTO_MANAGE     = "helpdesk.automation.change"
PERM_TEAM_MANAGE     = "helpdesk.team.change"

# ---- Suggested default roles ----
# These are used only by fixtures; the permission engine is the authoritative source.

ROLE_AGENT = {
    "code": "helpdesk_agent",
    "name": "Help Desk Agent",
    "permissions": [
        PERM_TICKET_VIEW, PERM_TICKET_CREATE, PERM_TICKET_CHANGE,
        PERM_REPLY_VIEW, PERM_REPLY_ADD, PERM_REPLY_CHANGE,
        PERM_QUEUE_VIEW,
    ],
}

ROLE_SUPERVISOR = {
    "code": "helpdesk_supervisor",
    "name": "Help Desk Supervisor",
    "permissions": [
        *ROLE_AGENT["permissions"],
        PERM_TICKET_DELETE,
        PERM_QUEUE_MANAGE,
        PERM_CATEGORY_MANAGE,
        PERM_TAG_MANAGE,
        PERM_SLA_MANAGE,
        PERM_AUTO_MANAGE,
        PERM_TEAM_MANAGE,
    ],
}

ROLE_PORTAL_USER = {
    "code": "helpdesk_portal",
    "name": "Portal User",
    "permissions": [
        PERM_TICKET_VIEW,   # own tickets only — enforced at service layer
        PERM_TICKET_CREATE,
        PERM_REPLY_ADD,     # on own tickets
    ],
}
