# 🏠 نظام المفضلة - B للتطوير العقاري

## 📋 نظرة عامة
نظام المفضلة يسمح للمستخدمين بحفظ العقارات المفضلة لديهم مع إمكانية إضافة ملاحظات شخصية وتصنيفها وتتبع تغييرات الأسعار.

## 🗂️ الملفات الرئيسية

### 1. الصفحة الرئيسية
- **`favorites.php`** - الصفحة الرئيسية للمفضلة باستخدام React و Ant Design

### 2. ملفات API
- **`api/get_favorites.php`** - جلب المفضلة للمستخدم الحالي
- **`api/add_favorite.php`** - إضافة عقار إلى المفضلة
- **`api/remove_favorite.php`** - حذف عقار من المفضلة
- **`api/update_favorite.php`** - تحديث بيانات المفضلة
- **`api/request_viewing.php`** - طلب معاينة العقار
- **`api/check_price_changes.php`** - فحص تغييرات الأسعار

### 3. ملفات إضافية
- **`add_sample_data_simple.php`** - إضافة بيانات تجريبية (نسخة مبسطة)
- **`add_sample_favorites.sql`** - ملف SQL لإضافة البيانات التجريبية

## 🗄️ هيكل قاعدة البيانات

### جدول `favorites_properties`
```sql
CREATE TABLE `favorites_properties` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `property_id` int(11) NOT NULL, -- يرتبط بـ properties.id
  `usercode` int(11) NOT NULL, -- يرتبط بـ users.usercode
  `user_comment` text, -- ملاحظة شخصية
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `saved_price` decimal(12,2), -- السعر لحظة الإضافة
  `status_at_save` enum('available', 'pending', 'sold', 'rented'),
  `last_price_check` datetime, -- آخر مزامنة للسعر
  `price_change_alert` tinyint(1) NOT NULL DEFAULT 0, -- إشعار عند تغيّر السعر
  `viewing_requested_at` datetime, -- طلب معاينة العقار
  `folder` varchar(100), -- تصنيف شخصي
  `tags` varchar(255), -- كلمات مفتاحيّة
  `priority` tinyint(3) UNSIGNED NOT NULL DEFAULT 0, -- درجة الأولويّة
  `rating` tinyint(3) UNSIGNED, -- تقييم شخصي (1-5)
  `property_snapshot` longtext -- بيانات مختصرة وقت الحفظ
);
```

## ✨ الميزات الرئيسية

### 1. عرض المفضلة
- عرض العقارات المفضلة في بطاقات جذابة
- إحصائيات شاملة (عدد المفضلة، متوسط التقييم، إلخ)
- فلترة وبحث متقدم

### 2. إدارة المفضلة
- إضافة عقار إلى المفضلة
- حذف عقار من المفضلة
- تعديل الملاحظات والتصنيفات
- إضافة تقييم شخصي

### 3. التصنيف والتنظيم
- إنشاء مجلدات شخصية
- إضافة كلمات مفتاحية
- تحديد الأولوية
- تقييم شخصي للعقارات

### 4. تتبع الأسعار
- حفظ السعر لحظة الإضافة
- تفعيل تنبيهات تغيير السعر
- فحص دوري للأسعار
- عرض نسبة التغيير

### 5. طلب المعاينة
- طلب معاينة العقار
- تتبع حالة طلبات المعاينة
- إشعارات للمالك

## 🚀 الاستخدام

### إضافة بيانات تجريبية
```bash
# تشغيل الملف المبسط لإضافة بيانات تجريبية
php add_sample_data_simple.php
```

### الوصول للصفحة
```
http://localhost/0f/users/owner/utilities/favorites.php
```

### إضافة عقار إلى المفضلة
```javascript
const addToFavorites = async (propertyId, data) => {
  const response = await fetch('api/add_favorite.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      property_id: propertyId,
      user_comment: data.comment,
      folder: data.folder,
      tags: data.tags,
      priority: data.priority,
      rating: data.rating,
      price_change_alert: data.priceAlert
    })
  });
  return response.json();
};
```

### جلب المفضلة
```javascript
const getFavorites = async () => {
  const response = await fetch('api/get_favorites.php');
  return response.json();
};
```

### تحديث المفضلة
```javascript
const updateFavorite = async (favoriteId, data) => {
  const response = await fetch('api/update_favorite.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      favorite_id: favoriteId,
      ...data
    })
  });
  return response.json();
};
```

### حذف من المفضلة
```javascript
const removeFavorite = async (favoriteId) => {
  const response = await fetch('api/remove_favorite.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ favorite_id: favoriteId })
  });
  return response.json();
};
```

## 🔒 الأمان
- التحقق من تسجيل الدخول في جميع API
- التحقق من ملكية المفضلة قبل التعديل/الحذف
- حماية من SQL Injection باستخدام Prepared Statements
- معالجة الأخطاء بشكل آمن

## 🎨 التصميم
- استخدام React 17 مع Ant Design 4.24.13
- تصميم متجاوب (Responsive Design)
- دعم اللغة العربية والاتجاه RTL
- ألوان متناسقة مع النظام العام
- **يمنع استخدام اللون البنفسجي**
- **يمنع استخدام Bootstrap**

## 📋 المتطلبات
- PHP 7.4+
- MySQL 5.7+
- React 17
- Ant Design 4.24.13
- مكتبة Cairo للخطوط العربية

## 🔧 الإصلاحات المطبقة

### 1. إصلاح نظام التحقق من تسجيل الدخول
- تم تغيير `$_SESSION['usercode']` إلى `$_SESSION[SESSION_USER_CODE]`
- تم إضافة تضمين `session_config.php` في جميع الملفات
- تم تطبيق نفس نظام التحقق المستخدم في العقود والعقارات

### 2. إصلاح مشكلة Babel
- تم استبدال Optional Chaining (`?.`) بدوال مساعدة متوافقة
- تم إضافة `safeGet()` و `safeSearch()` للتعامل الآمن مع البيانات

### 3. إصلاح المسارات
- تم تصحيح مسارات تضمين الملفات
- تم تحديث رابط عرض العقار إلى `view_property.php`

## 🚀 التطوير المستقبلي
- إضافة إشعارات فورية لتغييرات الأسعار
- دعم التصدير والاستيراد
- إضافة تقارير وإحصائيات متقدمة
- دعم المشاركة مع المستخدمين الآخرين
- إضافة مقارنة بين العقارات المفضلة

## 📞 الدعم
لأي استفسارات أو مشاكل، يرجى التواصل مع فريق التطوير.
