# CONTENT_EDITOR_REPORT.md
### تقرير محرر المحتوى المؤسسي — Phase 11, Module 3

**الحالة العامة: ✅ مكتمل ومُتحقَّق منه فعليًا (Lint + TypeCheck + Build + تشغيل خادم حقيقي عبر 8 حالات).**
**لا Prisma، لا API، لا حفظ حقيقي، لا محرر خارجي (TipTap/EditorJS/Lexical) — محرر Blocks مبني بالكامل يدويًا.**

---

## 1. الصفحة والمسار

| المسار | الوظيفة |
|---|---|
| `/admin/editor/[contentType]/[slug]` | محرر واحد يخدم 5 أنواع محتوى (`generateStaticParams` يولِّد مسارًا لكل عنصر Mock موجود عبر الأنواع الخمسة) |

**زر "تعديل" في `GenericContentTable`** (Module 2.3) **مُوصَّل الآن فعليًا** بهذا المحرر بدل رسالة "قريبًا" — أول تكامل حقيقي بين وحدتين من هذه المرحلة.

---

## 2. القرار المعماري الأهم: امتداد `ContentBlock` من محرك المحتوى نفسه

**لم يُنشأ نموذج بيانات مواز للمحرر.** بدل ذلك، اتحاد `ContentBlock` النوعي (Phase 9.5، `lib/mock/content.ts`) وُسِّع من 3 أنواع (عنوان/فقرة/اقتباس) إلى **13 نوعًا** (+استشهاد، آية قرآنية، حديث، صورة، فيديو، صوت، جدول، قائمة، فاصل، تنبيه) — **بلا أي تغيير في بنية الأنواع الثلاثة الأصلية**. النتيجة: `ContentBody` وTableOfContents (Phase 9.5) استمرا بالعمل بلا أي تعديل، والصفحة العامة الحقيقية `/articles/taqwa-in-quran` (مبنية منذ Phase 9.5) تعرض الآن بلوكَي `list`/`callout` الجديدين **بنجاح تام دون أي كسر** — تحقَّق ذلك فعليًا بإعادة طلب الصفحة العامة بعد التعديل.

---

## 3. المكوّنات المُعاد استخدامها من Content Engine (حرفيًا، بلا نسخة موازية)

| المكوّن | أين استُخدِم |
|---|---|
| `ContentHeader` | وضع Preview بالكامل |
| `ContentBody` | وضع Preview **+** الصفحة العامة الحقيقية معًا من نفس الاستدعاء |
| `CitationBlock` | وضع Preview |
| `TagsSection` | وضع Preview |
| `Alert` (Phase 8) | عرض كتلة `callout` داخل `ContentBody` نفسها |

**"نفس مكونات Content Engine التي تعرض المقالات حاليًا" مُحقَّق حرفيًا لا مجازيًا** — `ContentPreview` (الملف الوحيد الجديد لهذا الغرض) لا يحتوي أي منطق عرض خاص به؛ هو تجميع استيراد فقط.

---

## 4. المكوّنات الجديدة (عامة عبر أنواع المحتوى الخمسة، لا خاصة بنوع واحد)

| المكوّن | الغرض | محور الجنرالية |
|---|---|---|
| `EditorShell` | المنسِّق الرئيسي | يستقبل `ContentItem` واحدًا فقط، بلا فرع شرطي على `kind` في أي مكان |
| `BlockEditor` | إدارة قائمة الكتل (إضافة/حذف/إعادة ترتيب) | يعمل على `ContentBlock[]` مباشرة |
| `BlockFieldEditor` | نموذج تحرير مصغَّر لكل نوع كتلة | **محور الجنرالية الحقيقي** — مُعامَل بـ`block.type` لا بنوع المحتوى؛ تحرير فقرة في مقالة يستخدم نفس النموذج المصغَّر بالحرف لتحرير فقرة في فتوى |
| `EditorSidebar` | خصائص + SEO + Open Graph + Canonical + Slug + تاريخ نشر + لغة + حالة مراجعة | عام تمامًا لأي `EditableDraft` |
| `WorkflowBar` | أزرار الانتقال بين الحالات الخمس | يعيد استخدام `StatusBadge` (Module 2.1)، ويمنع تجاوز أي مرحلة (لا انتقال إلا للمرحلة التالية مباشرة) |
| `AutosaveIndicator` | Saving/Saved/Unsaved | شكلي بحت، بلا أي منطق حفظ |
| `ContentPreview` | تجميع مكوّنات Content Engine لوضع المعاينة | صفر منطق عرض خاص |

---

## 5. قرارات معمارية إضافية

1. **`lib/mock/editor.ts` كطبقة تحميل/دمج لا مصدر بيانات جديد** — `loadEditableDraft` ينسخ من `ContentItem` موجود فعليًا، و`draftToPreviewItem` يدمج التعديلات المحلية عائدًا لشكل `ContentItem` كامل لتغذية `ContentPreview` — بلا أي حفظ حقيقي في أي اتجاه.
2. **منع تجاوز مراحل الاعتماد في `WorkflowBar` صراحة:** الزر التالي فقط قابل للنقر (لا قفزة من `DRAFT` مباشرة إلى `PUBLISHED`) — نفس مبدأ Module 2.1، مُطبَّق الآن على واجهة تحرير كاملة لا صف جدول فقط.
3. **الجدول (Table Block) والقائمة (List Block) بتحرير نصي مبسَّط لا شبكة تفاعلية كاملة:** إدخال الرؤوس/الصفوف عبر حقول نصية مفصولة بفاصلة/أسطر بدل محرر جدول بصري كامل — قرار نطاق واعٍ يوازن التعقيد مقابل الفائدة ضمن حدود مرحلة واجهة فقط بلا حفظ حقيقي.
4. **صور/فيديو/صوت كأزرار رفع معطَّلة بوضوح:** تمامًا كنمط `RecitationPanel` (Phase 9.3) و`RowActions` المعطَّلة (Module 2.1) — لا وهم بوظيفة رفع حقيقية غير موجودة.

---

## 6. نتائج التحقق

| الفحص | النتيجة |
|---|---|
| `npm run lint` | ✅ صفر أخطاء (بعد تنظيف تحذيرين بسيطين: استيراد غير مستخدَم) |
| `npx tsc --noEmit` | ✅ صفر أخطاء جديدة **من أول تشغيل** رغم حجم هذه الوحدة |
| `npm run build` | ✅ "Compiled successfully" |
| **`/admin/editor/articles/taqwa-in-quran`** | ✅ `200` — كل الأقسام (كتل، خصائص، SEO، OG، مراجعة، سير عمل) مؤكَّدة في HTML الفعلي |
| **`/admin/editor/fatwas/...`, `/books/...`, `/lessons/...`, `/news/...`** | ✅ `200` لكل الأربعة — **نفس المحرر، محتوى مختلف فقط** |
| **`/admin/editor/articles/does-not-exist`** | ✅ `404` صحيح |
| **English locale** | ✅ `200` |
| **إعادة فحص `/articles/taqwa-in-quran` العامة بعد امتداد `ContentBlock`** | ✅ `200` — الكتلتان الجديدتان (`list`, `callout`) تظهران بنجاح، صفر انحدار |

---

## 7. الخلاصة — معيار النجاح

**مُحقَّق ومُثبَت فعليًا لا نظريًا:** طُلبت 5 مسارات محرر لأنواع مختلفة فعليًا عبر خادم حقيقي، وكلها نجحت من **نفس مكوّن `EditorShell`** بلا أي تمييز نوعي في منطقه. الفارق الوحيد بين تحرير مقالة وتحرير فتوى هو البيانات الممرَّرة (`ContentItem` مختلف)، تمامًا كما نصَّ معيار النجاح حرفيًا. بانتظار موافقة صريحة قبل الوحدات المتبقية (Workflow المستقل كصفحة، مكتبة الوسائط، المستخدمون، الترجمة، الإعدادات).
