# FRONTEND.md — شرح الواجهة الحالية + مواصفات التحسين (تصميم متجاوب + طرق شحن) > ملف مكمّل لـ `AGENTS.md` و`WALLET.md`. يشرح الواجهة الموجودة حالياً (`public/index.html`, > `public/app.js`, `public/styles.css`) صفحة صفحة ودالة دالة، ثم يحدد مواصفات دقيقة > لثلاث تحسينات مطلوبة: (1) نظام ألوان متناسق مع خيار تغيير اللون الأساسي، (2) تصميم > متجاوب فعلي على الموبايل، (3) إصلاح طريقة شحن الرصيد لتدعم قنوات حقيقية > (PayPal / شام كاش / USDT ... إلخ) بدل حقل نصي حر. --- ## 1. شرح الصفحات (كل صفحة شو وظيفتها) الواجهة تطبيق صفحة واحدة (SPA) بدون أي framework — كل شي بملف `app.js` واحد، والتنقل بين "الصفحات" هو فعلياً تبديل محتوى `#view` حسب `state.view`. ### شاشة الدخول (قبل تسجيل الدخول) فورمين جنب بعض: تسجيل دخول وحساب جديد. عند نجاح الدخول تُخزَّن التوكنات وتنفتح الواجهة الرئيسية. لا رصيد ولا بيانات تُحمَّل قبل الدخول. ### لوحة المستخدم (Dashboard) نظرة سريعة: عدد الطلبات الكلي، عدد الطلبات قيد التنفيذ، عدد طلبات الشحن المعلّقة، وإجمالي المبلغ المصروف على الطلبات (محسوب من `transactions` نوع `order`). تحتها جدول بآخر 5 طلبات مع زر "عرض الكل" ينقلك لصفحة "طلباتي". **الهدف:** ملخص بلمحة، بدون أي إجراء — كله عرض فقط. ### الخدمات والطلب (Services) فورم إنشاء طلب بالأعلى (اختيار خدمة + رابط + كمية) وتحته كتالوج كامل بكل الخدمات النشطة (الاسم، التصنيف، السعر لكل 1000، الحد الأدنى والأعلى). السعر المعروض هو `sell_price` فقط — سعر المزوّد الحقيقي غير مرئي هون إطلاقاً (وهذا صحيح ومقصود، راجع `AGENTS.md` § 8). **الهدف:** تصفح + شراء. ### طلباتي (Orders) جدول بكل طلبات المستخدم نفسه فقط (الخدمة، الرابط، الكمية، المبلغ، المتبقي، الحالة). عرض فقط، لا إجراء — تحديث الحالة يصير تلقائياً من الـ job الدوري بالخلفية (`order-status.scheduler.js`)، فمجرد ما تعمل "تحديث" (زر أعلى الصفحة) بتشوف آخر حالة. ### شحن الرصيد (Deposits) — ⚠️ هاي الصفحة اللي فيها المشكلة المطلوب حلها فورم بسيط: مبلغ + **حقل نصي حر لاسم الطريقة** + مرجع التحويل. تحته جدول بطلبات الشحن السابقة وحالتها (معلّق/مقبول/مرفوض). المشكلة بالتفصيل بقسم 4 تحت. ### كشف الحساب (Transactions) جدول للقراءة فقط بكل حركة صارت على رصيد المستخدم (شحن، خصم طلب، استرجاع، تعديل أدمن) مع `balance_after` لكل صف — هاي هي "الحقيقة" اللي لازم تطابق الرصيد الظاهر بالأعلى دائماً (راجع `WALLET.md` § 2.4 التسوية الدورية). ### لوحة الأدمن (Admin) — تظهر فقط لو `role=admin` أربع بطاقات إحصائيات (عدد المستخدمين، طلبات معلّقة، إجمالي المبيعات، الربح)، فورم مزامنة خدمات من المزوّد، ثم أربع جداول إدارة: المستخدمون (حظر/تنشيط + تعديل رصيد يدوي عبر `prompt()`)، طلبات الشحن (قبول/رفض)، الخدمات (تفعيل/إيقاف)، وكل الطلبات (عرض فقط). --- ## 2. شرح كل دالة بـ `app.js` (شو مهمتها) ### الحالة والتخزين - **`state`** — كائن واحد مركزي فيه كل شي: التوكنات، الصفحة الحالية، وكل القوائم المحمّلة من الـ API (خدمات، طلبات، شحن، حركات، وبيانات الأدمن). - **`views`** — تعريف عناصر القائمة الجانبية (الآيدي، النص، هل هي للأدمن فقط). - **`el`** — كل عناصر الـ DOM المستخدمة كثيراً، محفوظة مرة وحدة بدل `querySelector` المتكرر. ### أدوات مساعدة عامة - **`formatStatus(value)`** — يترجم قيم الحالة الإنجليزية (`pending`, `completed`...) لنص عربي للعرض. - **`showMessage(text, type)` / `clearMessage()`** — شريط رسالة واحد (نجاح/خطأ) يظهر إما بشاشة الدخول أو داخل التطبيق حسب أيّهم ظاهر حالياً. - **`friendlyMessage(text)`** — قاموس صغير يترجم رسائل خطأ إنجليزية معروفة من الـ API لعربي؛ أي رسالة مو موجودة بالقاموس تظهر زي ما هي بالإنجليزي (نقطة ضعف حالية — لازم القاموس يكبر مع الوقت). - **`getFormData(form)`** — يحوّل أي `