"""BPM / APQC IAM permission definitions."""

from __future__ import annotations


def register_all() -> None:
    from simorgh.apps.iam.registry import register_permission

    # ── PCF Framework (admin only) ──────────────────────────────────────────
    register_permission("bpm.pcfframework.view",   label="مشاهده فریم‌ورک PCF",   description="View APQC PCF frameworks.")
    register_permission("bpm.pcfframework.add",    label="افزودن فریم‌ورک PCF",    description="Create new PCF framework editions.")
    register_permission("bpm.pcfframework.change", label="ویرایش فریم‌ورک PCF",   description="Edit PCF framework metadata.")
    register_permission("bpm.pcfframework.delete", label="حذف فریم‌ورک PCF",      description="Delete PCF frameworks.")

    # ── PCF Element ─────────────────────────────────────────────────────────
    register_permission("bpm.pcfelement.view",   label="مشاهده عناصر PCF",   description="Browse PCF hierarchy (categories, processes, activities).")
    register_permission("bpm.pcfelement.add",    label="افزودن عنصر PCF",    description="Add PCF elements.")
    register_permission("bpm.pcfelement.change", label="ویرایش عنصر PCF",   description="Edit PCF element names and definitions.")
    register_permission("bpm.pcfelement.delete", label="حذف عنصر PCF",      description="Delete PCF elements.")

    # ── PCF Metric ──────────────────────────────────────────────────────────
    register_permission("bpm.pcfmetric.view",   label="مشاهده متریک PCF",   description="View standard APQC metrics.")
    register_permission("bpm.pcfmetric.add",    label="افزودن متریک PCF",   description="Add metrics to PCF elements.")
    register_permission("bpm.pcfmetric.change", label="ویرایش متریک PCF",  description="Edit metric formulas and targets.")
    register_permission("bpm.pcfmetric.delete", label="حذف متریک PCF",     description="Delete metrics.")

    # ── Process Definition ──────────────────────────────────────────────────
    register_permission("bpm.processdefinition.view",   label="مشاهده تعریف فرایند",   description="View organisational process definitions.")
    register_permission("bpm.processdefinition.add",    label="افزودن فرایند",          description="Create new process definitions.")
    register_permission("bpm.processdefinition.change", label="ویرایش فرایند",          description="Edit process definitions.")
    register_permission("bpm.processdefinition.delete", label="حذف فرایند",             description="Delete process definitions.")

    # ── Process Ownership ───────────────────────────────────────────────────
    register_permission("bpm.processownership.view",   label="مشاهده مالکیت فرایند",   description="View process ownership assignments.")
    register_permission("bpm.processownership.add",    label="تخصیص مالکیت فرایند",    description="Assign process owners and managers.")
    register_permission("bpm.processownership.change", label="ویرایش مالکیت فرایند",   description="Change ownership roles.")
    register_permission("bpm.processownership.delete", label="حذف مالکیت فرایند",      description="Remove ownership assignments.")

    # ── Process Document ────────────────────────────────────────────────────
    register_permission("bpm.processdocument.view",   label="مشاهده مستندات فرایند",   description="View documents linked to processes.")
    register_permission("bpm.processdocument.add",    label="پیوست مستند به فرایند",   description="Link DMS documents to processes.")
    register_permission("bpm.processdocument.change", label="ویرایش لینک مستندات",     description="Update document link metadata.")
    register_permission("bpm.processdocument.delete", label="حذف لینک مستندات",        description="Unlink documents from processes.")

    # ── Process Data Item ───────────────────────────────────────────────────
    register_permission("bpm.processdataitem.view",   label="مشاهده آیتم‌های داده فرایند",   description="View EXT/OUT data catalog items.")
    register_permission("bpm.processdataitem.add",    label="افزودن آیتم داده",               description="Create new EXT/OUT data items.")
    register_permission("bpm.processdataitem.change", label="ویرایش آیتم داده",               description="Edit data item metadata.")
    register_permission("bpm.processdataitem.delete", label="حذف آیتم داده",                  description="Delete data catalog items.")

    # ── Process IO ──────────────────────────────────────────────────────────
    register_permission("bpm.processio.view",   label="مشاهده ورودی/خروجی فرایند",   description="View process I/O links.")
    register_permission("bpm.processio.add",    label="افزودن لینک ورودی/خروجی",     description="Link data items to processes.")
    register_permission("bpm.processio.change", label="ویرایش لینک ورودی/خروجی",    description="Edit I/O link settings.")
    register_permission("bpm.processio.delete", label="حذف لینک ورودی/خروجی",       description="Remove I/O links from processes.")

    # ── Process Operational Step ────────────────────────────────────────────
    register_permission("bpm.processoperationalstep.view",   label="مشاهده مراحل اجرایی",    description="View operational steps of processes.")
    register_permission("bpm.processoperationalstep.add",    label="افزودن مرحله اجرایی",    description="Add steps to a process.")
    register_permission("bpm.processoperationalstep.change", label="ویرایش مرحله اجرایی",    description="Edit step descriptions and mappings.")
    register_permission("bpm.processoperationalstep.delete", label="حذف مرحله اجرایی",       description="Delete process steps.")

    # ── Process Role ────────────────────────────────────────────────────────
    register_permission("bpm.processrole.view",   label="مشاهده نقش‌های فرایند",   description="View RACI roles defined for a process.")
    register_permission("bpm.processrole.add",    label="افزودن نقش به فرایند",    description="Define new roles for a process RACI matrix.")
    register_permission("bpm.processrole.change", label="ویرایش نقش فرایند",       description="Edit role definitions.")
    register_permission("bpm.processrole.delete", label="حذف نقش فرایند",          description="Remove roles from a process.")

    # ── RACI Matrix ──────────────────────────────────────────────────────────
    register_permission("bpm.racimatrix.view",   label="مشاهده ماتریس RACI",   description="View versioned RACI matrix snapshots.")
    register_permission("bpm.racimatrix.add",    label="ایجاد ماتریس RACI",    description="Create a new RACI matrix version.")
    register_permission("bpm.racimatrix.change", label="ویرایش ماتریس RACI",   description="Edit RACI matrix and its entries.")
    register_permission("bpm.racimatrix.delete", label="حذف ماتریس RACI",      description="Delete a RACI matrix snapshot.")

    # ── RACI Entry ────────────────────────────────────────────────────────────
    register_permission("bpm.racientry.view",   label="مشاهده سلول RACI",   description="View individual RACI cells.")
    register_permission("bpm.racientry.add",    label="افزودن سلول RACI",    description="Add a cell to a RACI matrix.")
    register_permission("bpm.racientry.change", label="ویرایش سلول RACI",    description="Update RACI responsibility assignments.")
    register_permission("bpm.racientry.delete", label="حذف سلول RACI",       description="Remove a cell from the RACI matrix.")

    # ── Process Rule ─────────────────────────────────────────────────────────
    register_permission("bpm.processrule.view",   label="مشاهده قوانین فرایند",   description="View business rules of a process.")
    register_permission("bpm.processrule.add",    label="افزودن قانون به فرایند",  description="Add business rules to a process.")
    register_permission("bpm.processrule.change", label="ویرایش قانون فرایند",     description="Edit business rule descriptions.")
    register_permission("bpm.processrule.delete", label="حذف قانون فرایند",        description="Remove business rules from a process.")

    # ── Process Control Point ─────────────────────────────────────────────────
    register_permission("bpm.processcontrolpoint.view",   label="مشاهده نقاط کنترل فرایند",   description="View control point gates of a process.")
    register_permission("bpm.processcontrolpoint.add",    label="افزودن نقطه کنترل",           description="Add control points to a process.")
    register_permission("bpm.processcontrolpoint.change", label="ویرایش نقطه کنترل",           description="Edit control point definitions.")
    register_permission("bpm.processcontrolpoint.delete", label="حذف نقطه کنترل",              description="Remove control points from a process.")

    # ── Process KPI (Phase 5) ─────────────────────────────────────────────────
    register_permission("bpm.processkpi.view",   label="مشاهده شاخص KPI فرایند",   description="View KPI definitions for a process.")
    register_permission("bpm.processkpi.add",    label="افزودن KPI به فرایند",      description="Create KPI definitions for a process.")
    register_permission("bpm.processkpi.change", label="ویرایش KPI فرایند",         description="Edit KPI targets, formulas, and metadata.")
    register_permission("bpm.processkpi.delete", label="حذف KPI فرایند",            description="Remove KPI definitions from a process.")

    # ── KPI Measurement (Phase 5) ─────────────────────────────────────────────
    register_permission("bpm.processkpimeasurement.view",   label="مشاهده اندازه‌گیری KPI",   description="View recorded KPI measurements.")
    register_permission("bpm.processkpimeasurement.add",    label="ثبت اندازه‌گیری KPI",      description="Record new KPI measurement values.")
    register_permission("bpm.processkpimeasurement.change", label="ویرایش اندازه‌گیری KPI",   description="Edit recorded measurement details.")
    register_permission("bpm.processkpimeasurement.delete", label="حذف اندازه‌گیری KPI",      description="Delete KPI measurement records.")

    # ── KPI Alert (Phase 5) ───────────────────────────────────────────────────
    register_permission("bpm.kpialert.view",   label="مشاهده هشدار KPI",   description="View KPI breach alerts.")
    register_permission("bpm.kpialert.add",    label="ایجاد هشدار KPI",    description="Create KPI alerts.")
    register_permission("bpm.kpialert.change", label="ویرایش هشدار KPI",   description="Update KPI alert details.")
    register_permission("bpm.kpialert.delete", label="حذف هشدار KPI",      description="Delete KPI alerts.")

    # ── Process Instance (Phase 6) ────────────────────────────────────────────
    register_permission("bpm.processinstance.view",   label="مشاهده نمونه اجرای فرایند",   description="View process execution instances.")
    register_permission("bpm.processinstance.add",    label="ایجاد نمونه اجرای فرایند",    description="Start a new process execution instance.")
    register_permission("bpm.processinstance.change", label="ویرایش نمونه اجرای فرایند",   description="Update instance status and details.")
    register_permission("bpm.processinstance.delete", label="حذف نمونه اجرای فرایند",      description="Delete process execution instances.")

    # ── Process Instance Step (Phase 6) ───────────────────────────────────────
    register_permission("bpm.processinstancestep.view",   label="مشاهده گام اجرایی",   description="View step execution state within an instance.")
    register_permission("bpm.processinstancestep.add",    label="افزودن گام اجرایی",   description="Add step records to a process instance.")
    register_permission("bpm.processinstancestep.change", label="ویرایش گام اجرایی",  description="Update step status and assignment.")
    register_permission("bpm.processinstancestep.delete", label="حذف گام اجرایی",     description="Remove a step record from an instance.")

    # ── Process Instance Rule Check (Phase 6) ─────────────────────────────────
    register_permission("bpm.processinstancerulecheck.view",   label="مشاهده بررسی انطباق قانون",   description="View rule compliance checks on instances.")
    register_permission("bpm.processinstancerulecheck.add",    label="ثبت بررسی انطباق قانون",      description="Record a rule compliance check.")
    register_permission("bpm.processinstancerulecheck.change", label="ویرایش بررسی انطباق قانون",   description="Update rule check results.")
    register_permission("bpm.processinstancerulecheck.delete", label="حذف بررسی انطباق قانون",      description="Delete rule check records.")

    # ── Control Point Execution (Phase 6) ─────────────────────────────────────
    register_permission("bpm.controlpointexecution.view",   label="مشاهده اجرای نقطه کنترل",   description="View control point gate review records.")
    register_permission("bpm.controlpointexecution.add",    label="ثبت اجرای نقطه کنترل",      description="Record outcome of a control point gate review.")
    register_permission("bpm.controlpointexecution.change", label="ویرایش اجرای نقطه کنترل",   description="Update control point execution details.")
    register_permission("bpm.controlpointexecution.delete", label="حذف اجرای نقطه کنترل",      description="Delete a control point execution record.")

    # ── Process BPMN (Phase 8) ─────────────────────────────────────────────────
    register_permission("bpm.processbpmn.view",   label="مشاهده دیاگرام BPMN فرایند",   description="View BPMN XML diagrams for a process.")
    register_permission("bpm.processbpmn.add",    label="آپلود دیاگرام BPMN",            description="Upload or save a new BPMN XML version.")
    register_permission("bpm.processbpmn.change", label="ویرایش دیاگرام BPMN",           description="Edit BPMN diagram metadata or content.")
    register_permission("bpm.processbpmn.delete", label="حذف دیاگرام BPMN",              description="Delete a BPMN diagram version.")
