# نظام المفضلة الجديد - Favorites System

## نظرة عامة

تم إنشاء نظام مفضلة موحد وحديث يدعم إضافة:
- **المشاريع** (Projects)
- **المستخدمين/المستقلين** (Users/Freelancers)
- **أعمال معرض الأعمال** (Gallery Works)

## الملفات المنشأة

### 1. Migration
- **الملف**: `database/migrations/2026_01_29_000000_create_favorites_table.php`
- **الوصف**: إنشاء جدول `favorites` باستخدام Polymorphic Relationship

### 2. Models
- **الملف**: `app/Models/Favorite.php`
- **الوصف**: Model للمفضلة مع علاقات polymorphic

### 3. Trait
- **الملف**: `app/Traits/Favoritable.php`
- **الوصف**: Trait قابل لإعادة الاستخدام يوفر جميع وظائف المفضلة

### 4. Controller
- **الملف**: `app/Http/Controllers/Front/FavoriteController.php`
- **الوصف**: Controller شامل لإدارة جميع عمليات المفضلة

### 5. Routes
- **الملف**: `routes/web.php`
- **الوصف**: Routes للمفضلة تحت prefix `/user/favorites`

## الاستخدام

### 1. تشغيل Migration

```bash
php artisan migrate
```

### 2. استخدام الـ Trait في Models

تم بالفعل إضافة `Favoritable` trait إلى:
- `App\Models\Project`
- `App\Models\User`
- `App\Models\Gallery`

### 3. الوظائف المتاحة

#### في أي Model يستخدم Favoritable trait:

```php
// إضافة للمفضلة
$project->addToFavorites($userId);

// إزالة من المفضلة
$project->removeFromFavorites($userId);

// Toggle (إضافة أو إزالة)
$isFavorited = $project->toggleFavorite($userId);

// التحقق من وجود في المفضلة
$isFavorited = $project->isFavoritedBy($userId);

// عدد المفضلة
$count = $project->favoritesCount();

// الحصول على جميع المفضلة
$favorites = $project->favorites;
```

### 4. Routes المتاحة

```php
// عرض جميع المفضلة
GET /user/favorites

// عرض المشاريع المفضلة
GET /user/favorites/projects

// عرض المستقلين المفضلين
GET /user/favorites/freelancers

// عرض أعمال المعرض المفضلة
GET /user/favorites/gallery

// Toggle مشروع
POST /user/favorites/toggle-project/{projectId}

// Toggle مستخدم
POST /user/favorites/toggle-user/{userId}

// Toggle عمل من المعرض
POST /user/favorites/toggle-gallery/{galleryId}

// حذف من المفضلة
DELETE /user/favorites/{favoriteId}
```

### 5. استخدام في Blade Templates

#### زر إضافة/إزالة من المفضلة للمشروع:

```blade
<button class="favorite-btn" 
        data-type="project" 
        data-id="{{ $project->id }}"
        data-favorited="{{ $project->isFavoritedBy(auth()->id()) ? 'true' : 'false' }}">
    <i class="fa {{ $project->isFavoritedBy(auth()->id()) ? 'fa-heart' : 'fa-heart-o' }}"></i>
    {{ $project->isFavoritedBy(auth()->id()) ? trans('Remove Favorite') : trans('Add Favorite') }}
</button>
```

#### JavaScript للتعامل مع الزر:

```javascript
$('.favorite-btn').on('click', function() {
    const btn = $(this);
    const type = btn.data('type');
    const id = btn.data('id');
    const isFavorited = btn.data('favorited') === 'true';
    
    const routes = {
        'project': '/user/favorites/toggle-project/',
        'user': '/user/favorites/toggle-user/',
        'gallery': '/user/favorites/toggle-gallery/'
    };
    
    $.ajax({
        url: routes[type] + id,
        method: 'POST',
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        success: function(response) {
            if (response.success) {
                // تحديث الزر
                btn.data('favorited', response.is_favorited);
                btn.find('i').toggleClass('fa-heart fa-heart-o');
                // btn.text(response.is_favorited ? 'إزالة من المفضلة' : 'أضف للمفضلة');
                
                // إظهار رسالة
                toastr.success(response.message);
            }
        },
        error: function(xhr) {
            toastr.error('حدث خطأ');
        }
    });
});
```

## مفاتيح الترجمة

تم إضافة المفاتيح التالية في `resources/lang/ar.json`:

```json
{
    "Added to favorites": "تمت الإضافة للمفضلة",
    "Removed from favorites": "تمت الإزالة من المفضلة",
    "You cannot favorite yourself": "لا يمكنك إضافة نفسك للمفضلة",
    "My Favorite Projects": "مشاريعي المفضلة",
    "My Favorite Freelancers": "المستقلين المفضلين",
    "My Favorite Works": "أعمالي المفضلة",
    "All Favorites": "كل المفضلة",
    "No favorites yet": "لا توجد مفضلة بعد",
    "Start adding items to your favorites": "ابدأ بإضافة عناصر إلى مفضلتك"
}
```

## البيانات القديمة

- **لا يتم نقل البيانات القديمة** من `project_favs` و `likes`
- الجداول القديمة يمكن الاحتفاظ بها أو حذفها حسب الحاجة
- النظام الجديد يبدأ من الصفر

## الخطوات التالية

1. **تشغيل Migration**:
   ```bash
   php artisan migrate
   ```

2. **إنشاء Views** (اختياري):
   - `resources/views/front/user/favorites/index.blade.php`
   - `resources/views/front/user/favorites/projects.blade.php`
   - `resources/views/front/user/favorites/freelancers.blade.php`
   - `resources/views/front/user/favorites/gallery.blade.php`

3. **إضافة أزرار المفضلة** في:
   - صفحات المشاريع
   - صفحات المستقلين
   - صفحات معرض الأعمال

4. **تحديث القوائم** لإضافة روابط المفضلة في:
   - القائمة الجانبية للمستخدم
   - Dashboard

## مميزات النظام الجديد

✅ **موحد**: جدول واحد لجميع أنواع المفضلة
✅ **مرن**: يمكن إضافة أنواع جديدة بسهولة
✅ **قابل لإعادة الاستخدام**: Trait يمكن إضافته لأي Model
✅ **آمن**: Unique constraint لمنع التكرار
✅ **سريع**: Indexes للأداء الأمثل
✅ **نظيف**: Polymorphic relationships
✅ **سهل الاستخدام**: API واضح وبسيط

## أمثلة على الاستعلامات

```php
// الحصول على جميع المشاريع المفضلة للمستخدم الحالي
$favoriteProjects = Favorite::where('user_id', auth()->id())
    ->where('favoritable_type', Project::class)
    ->with('favoritable')
    ->get()
    ->pluck('favoritable');

// الحصول على عدد المفضلة لمشروع معين
$count = $project->favoritesCount();

// الحصول على جميع المستخدمين الذين أضافوا مشروع للمفضلة
$users = $project->favorites()->with('user')->get()->pluck('user');
```
