# إعداد Firebase للإشعار الفوري (FCM) — SMK

هذا الدليل يشرح كيف تنشئ **مشروع Firebase واحد** يخدم كل تطبيقات SMK (العميل، التاجر، التوصيل) مع إشعارات سريعة عبر FCM.

## 1. إنشاء مشروع Firebase

1. افتح [Firebase Console](https://console.firebase.google.com/)
2. **Add project** → اسم مقترح: `smk-platform`
3. فعّل Google Analytics (اختياري)
4. بعد الإنشاء، ادخل إلى **Project settings**

## 2. تطبيقات متعددة داخل مشروع واحد

| التطبيق | Package / Bundle ID | الدور |
|---------|---------------------|-------|
| عميل SMK | `iq.smk.smk_customer` | `customer` |
| تاجر SMK | (حسب `smk_app` merchant) | `merchant` |
| توصيل SMK | (حسب تطبيق السائق) | `driver` |

لكل تطبيق:
1. **Add app** → Android و/أو iOS
2. حمّل `google-services.json` (Android) و `GoogleService-Info.plist` (iOS)
3. ضع الملفات في:
   - `smk_customer/android/app/google-services.json`
   - `smk_customer/ios/Runner/GoogleService-Info.plist`

## 3. FlutterFire CLI

```bash
# تثبيت CLI (مرة واحدة)
dart pub global activate flutterfire_cli

# من جذر المشروع — لكل تطبيق Flutter
cd smk_customer
flutterfire configure --project=smk-platform
```

سيُنشئ `lib/firebase_options.dart` ويستبدل الملف المؤقت. بعدها عدّل:

```dart
static bool get isConfigured => true;
```

أو احذف الشرط من `PushService` إذا أصبح الملف حقيقياً.

## 4. Android — Gradle

في `smk_customer/android/settings.gradle.kts` أضف:

```kotlin
plugins {
    // ...
    id("com.google.gms.google-services") version "4.4.2" apply false
}
```

في `smk_customer/android/app/build.gradle.kts`:

```kotlin
plugins {
    id("com.android.application")
    id("kotlin-android")
    id("dev.flutter.flutter-gradle-plugin")
    id("com.google.gms.google-services")
}
```

## 5. iOS

1. في Xcode: **Signing & Capabilities** → **Push Notifications**
2. **Background Modes** → **Remote notifications**
3. ارفع **APNs Key** في Firebase → Project Settings → Cloud Messaging

## 6. Laravel — إرسال Push من الخادم (FCM HTTP v1)

في مشروعك **Legacy API معطّل** — هذا صحيح وحديث. استخدم **V1** فقط.

### الخطوات

1. Firebase Console → ⚙️ **Project settings** → **Service accounts**
2. **Generate new private key** → حمّل ملف JSON
3. ضع الملف هنا (لا ترفعه Git):
   ```
   storage/app/firebase/firebase-service-account.json
   ```
4. في `.env`:

```env
FCM_PROJECT_ID=smk-platform-595f9
FCM_CREDENTIALS=storage/app/firebase/firebase-service-account.json
```

5. نفّذ:
   ```bash
   php artisan config:clear
   ```

> **لا تحتاج** `FCM_SERVER_KEY` (Legacy) — معطّل في Firebase.

الخدمة جاهزة في:
- `app/Services/FcmService.php` (HTTP v1)
- `app/Services/CustomerNotificationService.php`

عند تغيير حالة الطلب يُرسل إشعار للعميل تلقائياً.

## 7. تسجيل الجهاز من التطبيق

بعد تسجيل الدخول، `PushService` يرسل التوكن إلى:

```
POST /api/v1/devices/register
{
  "fcm_token": "...",
  "platform": "android",
  "app_role": "customer"
}
```

عند تسجيل الخروج يُلغى التسجيل عبر `DELETE /devices/unregister`.

## 8. اختبار الإشعارات

### من Firebase Console
1. **Engage** → **Messaging** → **Create campaign**
2. Target: تطبيق `smk_customer`
3. أرسل رسالة تجريبية

### من Laravel (tinker)

```php
app(\App\Services\FcmService::class)->sendToTokens(
    ['DEVICE_FCM_TOKEN'],
    'اختبار SMK',
    'الإشعارات تعمل بنجاح',
    ['order_id' => 1]
);
```

### إشعار داخل التطبيق (بدون FCM)
يعمل `GET /api/v1/notifications` حتى بدون Firebase — مفيد للتطوير.

## 9. استعادة كلمة المرور

- `POST /auth/forgot-password` — يرسل رمز 6 أرقام
- `POST /auth/reset-password` — يعيّن كلمة مرور جديدة
- الرمز يُرسل **بالبريد فقط** — لا يُعرض في استجابة API أو التطبيق

## 10. متطلبات المتاجر (Apple / Google)

| العنصر | الحالة |
|--------|--------|
| سياسة الخصوصية | شاشة + API `/app-info` |
| شروط الاستخدام | شاشة + API |
| حذف الحساب | مفعّل |
| الإشعارات | FCM + شاشة الإشعارات |

## 11. تشغيل تطبيق العميل

```bash
cd smk_customer
flutter pub get
flutter run
```

**مهم:** التعديلات الجديدة في `smk_customer` وليس `smk_app`.

## 12. أدوار التطبيقات الأخرى

كرّر نفس الخطوات لـ `smk_app` (تاجر) وتطبيق التوصيل مع:
- `app_role`: `merchant` أو `driver`
- Package ID مختلف لكل تطبيق في Firebase
- نفس `FCM_SERVER_KEY` في Laravel

---

**الدعم:** راجع `storage/logs/laravel.log` لرمز استعادة كلمة المرور في وضع التطوير، وتأكد من `FCM_SERVER_KEY` للإشعارات الفورية.
