# إعداد مزامنة السيرفر والفرع

المزامنة تجعل قاعدة بيانات السيرفر هي النسخة الأساسية. نسخة الفرع تعمل محلياً عند انقطاع الإنترنت، ثم ترفع التغييرات وتسحب تحديثات السيرفر عند عودة الاتصال.

## التثبيت على النسختين

1. حدّث ملفات المشروع على السيرفر وعلى جهاز/أجهزة الفروع.
2. خذ نسخة احتياطية من قواعد البيانات قبل أول تشغيل.
3. شغّل من مجلد المشروع على كل نسخة:

   ```bash
   php artisan migrate --path=database/migrations/2026_10_06_000100_create_offline_sync_tables.php
   php artisan optimize:clear
   ```

4. تأكد أن مجلدات `public/uploads` و`storage/app/public` موجودة وقابلة للكتابة إذا أردت مزامنة الملفات.

## إعداد نسخة السيرفر أولاً

1. سجّل الدخول بحساب مالك أو مدير النظام وافتح **الإعدادات ← مزامنة الأونلاين**.
2. اختر **نسخة السيرفر (أونلاين)**، فعّل استقبال المزامنة، وأنشئ مفتاحاً سرياً قوياً.
3. احفظ المفتاح في مكان آمن. سيُدخل المفتاح نفسه في إعداد كل نسخة فرع.
4. اجعل الموقع متاحاً عبر HTTPS، ثم استخدم عنوانه الأساسي دون `/sync` في إعدادات الفروع.

## إعداد نسخة الفرع

1. افتح شاشة إعدادات المزامنة واختر **نسخة أوفلاين (احتياطي)**.
2. فعّل المزامنة، وأدخل عنوان السيرفر ومفتاح الاستقبال، ثم اختبر الاتصال واحفظ.
3. نفّذ أول **سحب من السيرفر** والفرع خالٍ من بيانات تشغيل محلية مهمة. أول سحب يهيئ قاعدة الفرع كنسخة من السيرفر؛ لا تبدأ به فوق بيانات مستقلة تحتاج الاحتفاظ بها.
4. فعّل المزامنة التلقائية إذا كان خادم الفرع يشغّل مجدول Laravel باستمرار.

## تشغيل المجدول

تُسجّل الأوامر تلقائياً في مجدول Laravel كل خمس دقائق. يجب على النظام تشغيل:

```bash
php artisan schedule:run
```

كل دقيقة. على Windows/XAMPP أضف مهمة في **Task Scheduler** تعمل كل دقيقة، وتشغّل `php.exe` مع وسيط `artisan schedule:run`، واجعل مجلد بدء التشغيل هو مجلد المشروع. على Linux أضف cron القياسي لـ Laravel.

لو لم يتم إعداد المجدول، تظل المزامنة اليدوية متاحة من شاشة المزامنة، وكذلك عبر `php artisan sync:push` و`php artisan sync:pull`.

## قيم `.env` الاختيارية

يمكن ضبط `SYNC_CLOUD_URL` و`SYNC_TOKEN` و`SYNC_RECEIVE_TOKEN` كبديل لإعدادات الشاشة. إعدادات الشاشة تُخزن مشفرة باستخدام `APP_KEY`. لا تستخدم المفتاح نفسه بين مشاريع مستقلة، ولا تغيّر `APP_KEY` بعد حفظ مفاتيح المزامنة المشفرة.
