<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;

class RestaurantController extends Controller
{
    /**
     * جلب قائمة المطاعم
     */
    public function getRestaurants(Request $request): JsonResponse
    {
        try {
            // معاملات البحث
            $search = $request->get('search');
            $cuisineType = $request->get('cuisine_type');
            $governorate = $request->get('governorate') ? trim((string) $request->get('governorate')) : null;
            $city = $request->get('city') ? trim((string) $request->get('city')) : null;
            $governorateId = $request->get('governorate_id') ? (int) $request->get('governorate_id') : null;
            $cityId = $request->get('city_id') ? (int) $request->get('city_id') : null;
            $minRating = $request->get('min_rating');
            $isOpen = $request->get('is_open');
            $sortBy = $request->get('sort_by');
            $latitude = $request->get('latitude');
            $longitude = $request->get('longitude');
            $radius = $request->get('radius', 50); // نصف قطر البحث بالكيلومتر (افتراضي 50 كم)

            // حل معرف المحافظة من الاسم إذا أُرسل الاسم فقط
            if (!$governorateId && $governorate && !$latitude) {
                $governorateId = \App\Models\Governorate::where('name_ar', $governorate)->value('id');
            }
            // حل معرف المدينة من الاسم (مع المحافظة إن وُجدت)
            if (!$cityId && $city && !$latitude) {
                $cityQuery = \App\Models\City::where('name_ar', $city);
                if ($governorateId) {
                    $cityQuery->where('governorate_id', $governorateId);
                }
                $cityId = $cityQuery->value('id');
                if (!$cityId) {
                    $cityIds = \App\Models\City::where('name_ar', $city)->pluck('id')->toArray();
                    if (count($cityIds) === 1) {
                        $cityId = $cityIds[0];
                    }
                }
            }

            \Log::info('🍽️ [RESTAURANTS API] Request params:', [
                'search' => $search,
                'governorate' => $governorate,
                'city' => $city,
                'governorate_id' => $governorateId,
                'city_id' => $cityId,
                'latitude' => $latitude,
                'longitude' => $longitude,
                'is_open' => $isOpen,
            ]);

            // جلب المطاعم الحقيقية من قاعدة البيانات
            $query = \App\Models\Restaurant::where('is_active', true)
                ->with(['menuItems' => function($q) {
                    $q->where('is_available', true);
                }]);

            // تطبيق الفلاتر
            if ($search) {
                $query->where(function($q) use ($search) {
                    $q->where('name', 'like', "%{$search}%")
                      ->orWhere('description', 'like', "%{$search}%");
                });
            }

            if ($cuisineType && $cuisineType !== 'الكل') {
                $query->where('cuisine_type', $cuisineType);
            }

            // إذا لم يتم تحديد الموقع (latitude/longitude)، نطبق فلتر المحافظة/المدينة
            // نفلتر بالمحافظة: إما بالنص أو بمعرف المحافظة (يدعم المطاعم المخزنة بـ governorate_id فقط)
            if (!$latitude) {
                if ($governorateId) {
                    $query->where(function($q) use ($governorate, $governorateId) {
                        $q->where('governorate_id', $governorateId);
                        if ($governorate) {
                            $q->orWhere('governorate', $governorate);
                        }
                    });
                } elseif ($governorate) {
                    $query->where(function($q) use ($governorate) {
                        $q->where('governorate', $governorate)
                          ->orWhere('address', 'like', '%' . $governorate . '%');
                    });
                }

                if ($cityId) {
                    $query->where(function($q) use ($city, $cityId) {
                        $q->where('city_id', $cityId);
                        if ($city) {
                            $q->orWhere('city', $city);
                        }
                    });
                } elseif ($city) {
                    $query->where(function($q) use ($city) {
                        $q->where('city', $city)
                          ->orWhere('address', 'like', '%' . $city . '%');
                    });
                }
            }

            // البحث باستخدام الموقع (latitude/longitude)
            if ($latitude && $longitude) {
                // حساب المسافة باستخدام Haversine formula
                // نستخدم raw query لحساب المسافة
                $query->selectRaw('*, (
                    6371 * acos(
                        cos(radians(?)) * cos(radians(latitude)) *
                        cos(radians(longitude) - radians(?)) +
                        sin(radians(?)) * sin(radians(latitude))
                    )
                ) AS distance', [$latitude, $longitude, $latitude])
                ->having('distance', '<=', $radius)
                ->orderBy('distance', 'asc');
            }

            if ($minRating) {
                $query->where('rating', '>=', $minRating);
            }

            // إزالة فلتر is_open للسماح بعرض جميع المطاعم النشطة (سواء كانت مفتوحة أو مغلقة)
            // يمكن للمستخدم رؤية المطاعم المغلقة أيضاً لمعرفة متى ستفتح
            // if ($isOpen !== null) {
            //     $query->where('is_open', (bool)$isOpen);
            // }

            // تطبيق الترتيب
            if ($sortBy) {
                switch ($sortBy) {
                    case 'rating':
                        $query->orderBy('rating', 'desc');
                        break;
                    case 'name':
                        $query->orderBy('name', 'asc');
                        break;
                    case 'orders':
                        // يمكن إضافة ترتيب حسب عدد الطلبات لاحقاً
                        $query->orderBy('rating', 'desc');
                        break;
                    default:
                        $query->orderBy('rating', 'desc');
                }
            } else {
                $query->orderBy('rating', 'desc');
            }

            $restaurantsData = $query->get();
            
            \Log::info('🍽️ [RESTAURANTS API] Found ' . $restaurantsData->count() . ' restaurants');
            
            // إذا لم يتم العثور على مطاعم، إرجاع قائمة فارغة بدلاً من خطأ
            if ($restaurantsData->isEmpty()) {
                \Log::warning('🍽️ [RESTAURANTS API] No restaurants found with current filters');
                return response()->json([
                    'success' => true,
                    'data' => [],
                    'message' => 'لا توجد مطاعم متاحة حالياً'
                ], 200, [], JSON_UNESCAPED_UNICODE);
            }
            
            // تحويل البيانات إلى الصيغة المطلوبة
            $restaurants = $restaurantsData->map(function($restaurant) {
                return [
                    'id' => $restaurant->id,
                    'name' => $restaurant->name,
                    'name_ar' => $restaurant->name,
                    'description' => $restaurant->description ?? '',
                    'description_ar' => $restaurant->description ?? '',
                    'cuisine_type' => $restaurant->cuisine_type ?? 'عراقي',
                    'cuisine_type_ar' => $restaurant->cuisine_type ?? 'عراقي',
                    'rating' => (float)$restaurant->rating,
                    'rating_count' => $restaurant->rating_count ?? 0,
                    'delivery_time' => $restaurant->delivery_time_minutes ?? 30,
                    'delivery_time_minutes' => $restaurant->delivery_time_minutes ?? 30,
                    'delivery_fee' => (float)$restaurant->delivery_fee,
                    'minimum_order' => (float)$restaurant->minimum_order,
                    'is_open' => (bool)$restaurant->is_open,
                    'is_active' => (bool)$restaurant->is_active,
                    'logo' => $restaurant->logo ? asset('storage/' . $restaurant->logo) : null,
                    'cover_image' => $restaurant->cover_image ? asset('storage/' . $restaurant->cover_image) : null,
                    'address' => $restaurant->address ?? '',
                    'address_ar' => $restaurant->address ?? '',
                    'phone' => $restaurant->phone ?? '',
                    'email' => $restaurant->email ?? null,
                    'governorate' => $restaurant->governorate ?? '',
                    'city' => $restaurant->city ?? '',
                    'latitude' => $restaurant->latitude ? (float)$restaurant->latitude : null,
                    'longitude' => $restaurant->longitude ? (float)$restaurant->longitude : null,
                    'distance' => isset($restaurant->distance) ? round((float)$restaurant->distance, 2) : null,
                    'menu_items' => $restaurant->menuItems->unique('id')->values()->map(function($item) {
                        return [
                            'id' => $item->id,
                            'restaurant_id' => $item->restaurant_id,
                            'name' => $item->name,
                            'name_ar' => $item->name,
                            'description' => $item->description ?? '',
                            'description_ar' => $item->description ?? '',
                            'price' => (float)$item->price,
                            'category' => $item->category ?? 'أطباق رئيسية',
                            'category_ar' => $item->category ?? 'أطباق رئيسية',
                            'image' => $item->image ? asset('storage/' . $item->image) : null,
                            'image_url' => $item->image ? asset('storage/' . $item->image) : null,
                            'is_available' => (bool)$item->is_available,
                            'is_popular' => (bool)($item->is_popular ?? false),
                            'preparation_time' => $item->preparation_time_minutes ?? 20,
                            'preparation_time_minutes' => $item->preparation_time_minutes ?? 20,
                            'ingredients' => $item->ingredients ? (is_string($item->ingredients) ? $item->ingredients : json_encode($item->ingredients)) : null,
                            'allergens' => $item->allergens ? (is_string($item->allergens) ? $item->allergens : json_encode($item->allergens)) : null,
                        ];
                    })->toArray(),
                ];
            })->toArray();


            return response()->json([
                'success' => true,
                'data' => $restaurants,
                'message' => 'تم جلب المطاعم بنجاح'
            ], 200, [], JSON_UNESCAPED_UNICODE);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب المطاعم: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * جلب قائمة طعام المطعم
     */
    public function getMenu(Request $request, $id): JsonResponse
    {
        try {
            // جلب المطعم
            $restaurant = \App\Models\Restaurant::find($id);
            
            if (!$restaurant) {
                return response()->json([
                    'success' => false,
                    'message' => 'المطعم غير موجود'
                ], 404);
            }

            // جلب قائمة الطعام الحقيقية من قاعدة البيانات (بدون تكرار حسب id)
            $menuItems = \App\Models\MenuItem::where('restaurant_id', $id)
                ->where('is_available', true)
                ->orderBy('category')
                ->orderBy('name')
                ->get()
                ->unique('id')
                ->values();

            // تحويل البيانات إلى الصيغة المطلوبة
            $menu = $menuItems->map(function($item) use ($id) {
                return [
                    'id' => $item->id,
                    'restaurant_id' => $id,
                    'name' => $item->name,
                    'name_ar' => $item->name,
                    'description' => $item->description ?? '',
                    'description_ar' => $item->description ?? '',
                    'price' => (float)$item->price,
                    'category' => $item->category ?? 'أطباق رئيسية',
                    'category_ar' => $item->category ?? 'أطباق رئيسية',
                    'image' => $item->image ? asset('storage/' . $item->image) : null,
                    'image_url' => $item->image ? asset('storage/' . $item->image) : null,
                    'is_available' => (bool)$item->is_available,
                    'is_popular' => (bool)($item->is_popular ?? false),
                    'preparation_time' => $item->preparation_time_minutes ?? 20,
                    'preparation_time_minutes' => $item->preparation_time_minutes ?? 20,
                    'ingredients' => $item->ingredients ? (is_string($item->ingredients) ? $item->ingredients : json_encode($item->ingredients)) : null,
                    'allergens' => $item->allergens ? (is_string($item->allergens) ? $item->allergens : json_encode($item->allergens)) : null,
                ];
            })->toArray();

            return response()->json([
                'success' => true,
                'data' => $menu,
                'message' => 'تم جلب قائمة الطعام بنجاح'
            ], 200, [], JSON_UNESCAPED_UNICODE);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب قائمة الطعام: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * جلب تفاصيل مطعم معين
     */
    public function getRestaurantDetails(Request $request, $id): JsonResponse
    {
        try {
            // جلب المطعم مع قائمة الطعام
            $restaurant = \App\Models\Restaurant::with(['menuItems' => function($q) {
                $q->where('is_available', true)->orderBy('category')->orderBy('name');
            }])->find($id);

            if (!$restaurant) {
                return response()->json([
                    'success' => false,
                    'message' => 'المطعم غير موجود'
                ], 404);
            }

            // تحويل البيانات إلى الصيغة المطلوبة
            $restaurantData = [
                'id' => $restaurant->id,
                'name' => $restaurant->name,
                'name_ar' => $restaurant->name,
                'description' => $restaurant->description ?? '',
                'description_ar' => $restaurant->description ?? '',
                'cuisine_type' => $restaurant->cuisine_type ?? 'عراقي',
                'cuisine_type_ar' => $restaurant->cuisine_type ?? 'عراقي',
                'rating' => (float)$restaurant->rating,
                'rating_count' => $restaurant->rating_count ?? 0,
                'delivery_time' => $restaurant->delivery_time_minutes ?? 30,
                'delivery_time_minutes' => $restaurant->delivery_time_minutes ?? 30,
                'delivery_fee' => (float)$restaurant->delivery_fee,
                'minimum_order' => (float)$restaurant->minimum_order,
                'is_open' => (bool)$restaurant->is_open,
                'is_active' => (bool)$restaurant->is_active,
                'logo' => $restaurant->logo ? asset('storage/' . $restaurant->logo) : null,
                'cover_image' => $restaurant->cover_image ? asset('storage/' . $restaurant->cover_image) : null,
                'address' => $restaurant->address ?? '',
                'address_ar' => $restaurant->address ?? '',
                'phone' => $restaurant->phone ?? '',
                'email' => $restaurant->email ?? null,
                'governorate' => $restaurant->governorate ?? '',
                'city' => $restaurant->city ?? '',
                'latitude' => $restaurant->latitude ? (float)$restaurant->latitude : null,
                'longitude' => $restaurant->longitude ? (float)$restaurant->longitude : null,
                'opening_time' => $restaurant->opening_time,
                'closing_time' => $restaurant->closing_time,
                'menu_items' => $restaurant->menuItems->unique('id')->values()->map(function($item) {
                    return [
                        'id' => $item->id,
                        'restaurant_id' => $item->restaurant_id,
                        'name' => $item->name,
                        'name_ar' => $item->name,
                        'description' => $item->description ?? '',
                        'description_ar' => $item->description ?? '',
                        'price' => (float)$item->price,
                        'category' => $item->category ?? 'أطباق رئيسية',
                        'category_ar' => $item->category ?? 'أطباق رئيسية',
                        'image' => $item->image ? asset('storage/' . $item->image) : null,
                        'image_url' => $item->image ? asset('storage/' . $item->image) : null,
                        'is_available' => (bool)$item->is_available,
                        'is_popular' => (bool)($item->is_popular ?? false),
                        'preparation_time' => $item->preparation_time_minutes ?? 20,
                        'preparation_time_minutes' => $item->preparation_time_minutes ?? 20,
                        'ingredients' => $item->ingredients ? (is_string($item->ingredients) ? $item->ingredients : json_encode($item->ingredients)) : null,
                        'allergens' => $item->allergens ? (is_string($item->allergens) ? $item->allergens : json_encode($item->allergens)) : null,
                    ];
                })->toArray(),
            ];

            return response()->json([
                'success' => true,
                'restaurant' => $restaurantData,
                'message' => 'تم جلب تفاصيل المطعم بنجاح'
            ], 200, [], JSON_UNESCAPED_UNICODE);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب تفاصيل المطعم: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * جلب المحافظات المتاحة
     */
    public function getAvailableGovernorates(): JsonResponse
    {
        try {
            $governorates = [
                'بغداد',
                'البصرة',
                'الموصل',
                'أربيل',
                'النجف',
                'كربلاء',
                'الأنبار',
                'ديالى',
                'واسط',
                'ميسان',
                'ذي قار',
                'صلاح الدين',
                'دهوك',
                'السليمانية',
                'المثنى',
                'القادسية',
                'بابل',
            ];

            return response()->json([
                'success' => true,
                'data' => $governorates,
                'message' => 'تم جلب المحافظات بنجاح'
            ], 200, [], JSON_UNESCAPED_UNICODE);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب المحافظات: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * جلب المدن المتاحة
     */
    public function getAvailableCities(): JsonResponse
    {
        try {
            $cities = [
                'بغداد',
                'البصرة',
                'الموصل',
                'أربيل',
                'النجف',
                'كربلاء',
                'الرمادي',
                'بعقوبة',
                'الكوت',
                'العمارة',
                'الناصرية',
                'تكريت',
                'دهوك',
                'السليمانية',
                'السماوة',
                'الديوانية',
                'الحلة',
            ];

            return response()->json([
                'success' => true,
                'data' => $cities,
                'message' => 'تم جلب المدن بنجاح'
            ], 200, [], JSON_UNESCAPED_UNICODE);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب المدن: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * إنشاء مطاعم تجريبية
     */
    private function getSampleRestaurants(): array
    {
        return [
            [
                'id' => 1,
                'name' => 'مطعم البيت العراقي',
                'name_ar' => 'مطعم البيت العراقي',
                'description' => 'مطعم عراقي أصيل يقدم أشهى الأطباق التقليدية',
                'description_ar' => 'مطعم عراقي أصيل يقدم أشهى الأطباق التقليدية',
                'cuisine_type' => 'عراقي',
                'cuisine_type_ar' => 'عراقي',
                'rating' => 4.5,
                'delivery_time' => '30-45 دقيقة',
                'delivery_fee' => 5000,
                'minimum_order' => 15000,
                'is_open' => true,
                'image_url' => 'https://via.placeholder.com/400x300?text=البيت+العراقي',
                'address' => 'شارع الجامعة، الناصرية، ذي قار',
                'address_ar' => 'شارع الجامعة، الناصرية، ذي قار',
                'phone' => '07801234567',
                'governorate' => 'ذي قار',
                'city' => 'الناصرية',
                'latitude' => 31.0473367,
                'longitude' => 46.3071033,
                'distance' => 1.2,
                'categories' => ['أطباق رئيسية', 'شوربات', 'مشروبات'],
            ],
            [
                'id' => 2,
                'name' => 'مطعم الشام',
                'name_ar' => 'مطعم الشام',
                'description' => 'أشهى الأطباق الشامية في الناصرية',
                'description_ar' => 'أشهى الأطباق الشامية في الناصرية',
                'cuisine_type' => 'شامي',
                'cuisine_type_ar' => 'شامي',
                'rating' => 4.3,
                'delivery_time' => '25-35 دقيقة',
                'delivery_fee' => 4000,
                'minimum_order' => 12000,
                'is_open' => true,
                'image_url' => 'https://via.placeholder.com/400x300?text=مطعم+الشام',
                'address' => 'شارع الكورنيش، الناصرية، ذي قار',
                'address_ar' => 'شارع الكورنيش، الناصرية، ذي قار',
                'phone' => '07801234568',
                'governorate' => 'ذي قار',
                'city' => 'الناصرية',
                'latitude' => 31.0480000,
                'longitude' => 46.3080000,
                'distance' => 0.8,
                'categories' => ['مشاوي', 'مقبلات', 'حلويات'],
            ],
            [
                'id' => 3,
                'name' => 'بيتزا إيطاليا',
                'name_ar' => 'بيتزا إيطاليا',
                'description' => 'أفضل البيتزا الإيطالية الأصيلة',
                'description_ar' => 'أفضل البيتزا الإيطالية الأصيلة',
                'cuisine_type' => 'إيطالي',
                'cuisine_type_ar' => 'إيطالي',
                'rating' => 4.7,
                'delivery_time' => '20-30 دقيقة',
                'delivery_fee' => 6000,
                'minimum_order' => 20000,
                'is_open' => true,
                'image_url' => 'https://via.placeholder.com/400x300?text=بيتزا+إيطاليا',
                'address' => 'شارع المطار، الناصرية، ذي قار',
                'address_ar' => 'شارع المطار، الناصرية، ذي قار',
                'phone' => '07801234569',
                'governorate' => 'ذي قار',
                'city' => 'الناصرية',
                'latitude' => 31.0490000,
                'longitude' => 46.3090000,
                'distance' => 2.1,
                'categories' => ['بيتزا', 'باستا', 'مقبلات'],
            ],
            [
                'id' => 4,
                'name' => 'مطعم الكبابجي',
                'name_ar' => 'مطعم الكبابجي',
                'description' => 'أشهى الكباب والمشاوي العراقية',
                'description_ar' => 'أشهى الكباب والمشاوي العراقية',
                'cuisine_type' => 'عراقي',
                'cuisine_type_ar' => 'عراقي',
                'rating' => 4.4,
                'delivery_time' => '35-50 دقيقة',
                'delivery_fee' => 3000,
                'minimum_order' => 18000,
                'is_open' => true,
                'image_url' => 'https://via.placeholder.com/400x300?text=مطعم+الكبابجي',
                'address' => 'شارع الشهداء، الناصرية، ذي قار',
                'address_ar' => 'شارع الشهداء، الناصرية، ذي قار',
                'phone' => '07801234570',
                'governorate' => 'ذي قار',
                'city' => 'الناصرية',
                'latitude' => 31.0460000,
                'longitude' => 46.3060000,
                'distance' => 1.5,
                'categories' => ['مشاوي', 'كباب', 'مقبلات'],
            ],
            [
                'id' => 5,
                'name' => 'مطعم المندي',
                'name_ar' => 'مطعم المندي',
                'description' => 'أشهى أطباق المندي العربي',
                'description_ar' => 'أشهى أطباق المندي العربي',
                'cuisine_type' => 'عربي',
                'cuisine_type_ar' => 'عربي',
                'rating' => 4.6,
                'delivery_time' => '40-60 دقيقة',
                'delivery_fee' => 7000,
                'minimum_order' => 25000,
                'is_open' => true,
                'image_url' => 'https://via.placeholder.com/400x300?text=مطعم+المندي',
                'address' => 'شارع الجوادر، الناصرية، ذي قار',
                'address_ar' => 'شارع الجوادر، الناصرية، ذي قار',
                'phone' => '07801234571',
                'governorate' => 'ذي قار',
                'city' => 'الناصرية',
                'latitude' => 31.0500000,
                'longitude' => 46.3100000,
                'distance' => 2.8,
                'categories' => ['مندي', 'كبسة', 'مشاوي'],
            ],
            [
                'id' => 6,
                'name' => 'سوشي ياباني',
                'name_ar' => 'سوشي ياباني',
                'description' => 'أشهى السوشي والأطباق اليابانية',
                'description_ar' => 'أشهى السوشي والأطباق اليابانية',
                'cuisine_type' => 'ياباني',
                'cuisine_type_ar' => 'ياباني',
                'rating' => 4.8,
                'delivery_time' => '30-45 دقيقة',
                'delivery_fee' => 8000,
                'minimum_order' => 30000,
                'is_open' => false, // مغلق الآن
                'image_url' => 'https://via.placeholder.com/400x300?text=سوشي+ياباني',
                'address' => 'شارع البلدية، الناصرية، ذي قار',
                'address_ar' => 'شارع البلدية، الناصرية، ذي قار',
                'phone' => '07801234572',
                'governorate' => 'ذي قار',
                'city' => 'الناصرية',
                'latitude' => 31.0450000,
                'longitude' => 46.3050000,
                'distance' => 1.8,
                'categories' => ['سوشي', 'ساشيمي', 'رامن'],
            ],
        ];
    }

    /**
     * جلب ملف المطعم الشخصي
     */
    public function getProfile(Request $request)
    {
        try {
            $user = $request->user();
            
            // التحقق من أن المستخدم هو مطعم
            if ($user->user_type !== 'restaurant_manager') {
                return response()->json([
                    'success' => false,
                    'message' => 'هذا المستخدم ليس مطعم'
                ], 403);
            }

            // جلب المطعم المرتبط بالمستخدم
            $restaurant = \App\Models\Restaurant::where('user_id', $user->id)->first();

            if (!$restaurant) {
                // إذا لم يكن هناك مطعم، أنشئ واحداً جديداً بالبيانات الافتراضية
                $restaurant = \App\Models\Restaurant::create([
                    'user_id' => $user->id,
                    'name' => $user->name ?? 'مطعم جديد',
                    'description' => 'وصف المطعم',
                    'address' => 'عنوان المطعم',
                    'phone' => $user->phone ?? '07123456789',
                    'email' => $user->email ?? 'restaurant@example.com',
                    'cuisine_type' => 'عراقي', // إضافة نوع المطبخ
                    'delivery_time_minutes' => 30,
                    'minimum_order' => 25000.0,
                    'delivery_fee' => 8000.0,
                    'is_open' => true,
                    'is_active' => true,
                    'rating' => 0.0,
                ]);
            }

            // تحويل ساعات العمل إلى Map
            $workingHours = [];
            if ($restaurant->opening_time && $restaurant->closing_time) {
                $timeRange = $restaurant->opening_time . ' - ' . $restaurant->closing_time;
                $workingHours = [
                    'الأحد' => $timeRange,
                    'الإثنين' => $timeRange,
                    'الثلاثاء' => $timeRange,
                    'الأربعاء' => $timeRange,
                    'الخميس' => $timeRange,
                    'الجمعة' => $timeRange,
                    'السبت' => $timeRange,
                ];
            } else {
                $workingHours = [
                    'الأحد' => '07:00 - 22:00',
                    'الإثنين' => '07:00 - 22:00',
                    'الثلاثاء' => '07:00 - 22:00',
                    'الأربعاء' => '07:00 - 22:00',
                    'الخميس' => '07:00 - 22:00',
                    'الجمعة' => '14:00 - 23:00',
                    'السبت' => '07:00 - 22:00',
                ];
            }

            // تنسيق وقت التوصيل
            $deliveryTime = $restaurant->delivery_time_minutes 
                ? $restaurant->delivery_time_minutes . ' دقيقة'
                : ($restaurant->delivery_time_minutes ? ($restaurant->delivery_time_minutes . '-45 دقيقة') : '30-45 دقيقة');

            return response()->json([
                'success' => true,
                'data' => [
                    'id' => $restaurant->id,
                    'name' => $restaurant->name,
                    'description' => $restaurant->description,
                    'address' => $restaurant->address,
                    'phone' => $restaurant->phone,
                    'email' => $restaurant->email,
                    'logo' => $restaurant->logo ? (str_starts_with($restaurant->logo, 'http') ? $restaurant->logo : asset('storage/' . $restaurant->logo)) : 'https://via.placeholder.com/150',
                    'cover_image' => $restaurant->cover_image ? (str_starts_with($restaurant->cover_image, 'http') ? $restaurant->cover_image : asset('storage/' . $restaurant->cover_image)) : 'https://via.placeholder.com/400x200',
                    'rating' => (float)($restaurant->rating ?? 0.0),
                    'delivery_time' => $deliveryTime,
                    'minimum_order' => (float)($restaurant->minimum_order ?? 25000.0),
                    'delivery_fee' => (float)($restaurant->delivery_fee ?? 8000.0),
                    'is_open' => (bool)($restaurant->is_open ?? true),
                    'working_hours' => $workingHours,
                ]
            ], 200, [], JSON_UNESCAPED_UNICODE);

        } catch (\Exception $e) {
            \Log::error('خطأ في جلب ملف المطعم: ' . $e->getMessage());
            \Log::error('Stack trace: ' . $e->getTraceAsString());
            
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب ملف المطعم: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * إحصائيات المطعم (خفيفة للداشبورد)
     */
    public function getStats(Request $request): JsonResponse
    {
        try {
            $user = $request->user();
            if ($user->user_type !== 'restaurant_manager') {
                return response()->json(['success' => false, 'message' => 'غير مصرح'], 403);
            }
            $restaurant = \App\Models\Restaurant::where('user_id', $user->id)->first();
            if (!$restaurant) {
                return response()->json(['success' => false, 'message' => 'المطعم غير موجود'], 404);
            }
            $today = now()->toDateString();
            $stats = [
                'total_orders' => \App\Models\FoodOrder::where('restaurant_id', $restaurant->id)->count(),
                'today_sales' => \App\Models\FoodOrder::where('restaurant_id', $restaurant->id)
                    ->where('status', 'delivered')
                    ->whereDate('created_at', $today)
                    ->sum('total'),
                'new_customers' => \App\Models\FoodOrder::where('restaurant_id', $restaurant->id)
                    ->distinct('customer_id')
                    ->count('customer_id'),
                'rating' => (float) ($restaurant->rating ?? 0),
            ];
            return response()->json([
                'success' => true,
                'data' => $stats,
                'message' => 'تم جلب الإحصائيات بنجاح',
            ], 200, [], JSON_UNESCAPED_UNICODE);
        } catch (\Exception $e) {
            \Log::error('خطأ في getStats: ' . $e->getMessage());
            return response()->json([
                'success' => false,
                'message' => 'حدث خطأ',
                'error' => $e->getMessage(),
            ], 500);
        }
    }

    /**
     * تحديث ملف المطعم
     */
    public function updateProfile(Request $request)
    {
        try {
            $user = $request->user();
            
            // التحقق من أن المستخدم هو مطعم
            if ($user->user_type !== 'restaurant_manager') {
                return response()->json([
                    'success' => false,
                    'message' => 'هذا المستخدم ليس مطعم'
                ], 403);
            }

            // جلب المطعم المرتبط بالمستخدم
            $restaurant = \App\Models\Restaurant::where('user_id', $user->id)->first();

            if (!$restaurant) {
                return response()->json([
                    'success' => false,
                    'message' => 'المطعم غير موجود'
                ], 404);
            }

            // التحقق من البيانات
            $validator = \Validator::make($request->all(), [
                'name' => 'sometimes|string|max:255',
                'description' => 'sometimes|string',
                'address' => 'sometimes|string',
                'phone' => 'sometimes|string|max:20',
                'email' => 'sometimes|email|max:255',
                'delivery_time' => 'sometimes|string',
                'minimum_order' => 'sometimes|numeric|min:0',
                'delivery_fee' => 'sometimes|numeric|min:0',
                'is_open' => 'sometimes|boolean',
            ]);

            if ($validator->fails()) {
                return response()->json([
                    'success' => false,
                    'message' => 'بيانات غير صحيحة',
                    'errors' => $validator->errors()
                ], 422);
            }

            // تحديث البيانات
            $updateData = [];
            
            if ($request->has('name')) {
                $updateData['name'] = $request->name;
            }
            if ($request->has('description')) {
                $updateData['description'] = $request->description;
            }
            if ($request->has('address')) {
                $updateData['address'] = $request->address;
            }
            if ($request->has('phone')) {
                $updateData['phone'] = $request->phone;
            }
            if ($request->has('email')) {
                $updateData['email'] = $request->email;
            }
            if ($request->has('delivery_time')) {
                // استخراج الأرقام من النص (مثل "30-45 دقيقة" -> 30)
                preg_match('/(\d+)/', $request->delivery_time, $matches);
                $updateData['delivery_time_minutes'] = isset($matches[1]) ? (int)$matches[1] : 30;
            }
            if ($request->has('minimum_order')) {
                $updateData['minimum_order'] = $request->minimum_order;
            }
            if ($request->has('delivery_fee')) {
                $updateData['delivery_fee'] = $request->delivery_fee;
            }
            if ($request->has('is_open')) {
                $updateData['is_open'] = $request->is_open;
            }

            $restaurant->update($updateData);

            return response()->json([
                'success' => true,
                'message' => 'تم تحديث ملف المطعم بنجاح',
                'data' => [
                    'id' => $restaurant->id,
                    'name' => $restaurant->name,
                    'description' => $restaurant->description,
                    'address' => $restaurant->address,
                    'phone' => $restaurant->phone,
                    'email' => $restaurant->email,
                ]
            ], 200, [], JSON_UNESCAPED_UNICODE);

        } catch (\Exception $e) {
            \Log::error('خطأ في تحديث ملف المطعم: ' . $e->getMessage());
            
            return response()->json([
                'success' => false,
                'message' => 'خطأ في تحديث ملف المطعم: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * جلب تفاصيل وجبة معينة
     */
    public function getMenuItemDetails(Request $request, $id): JsonResponse
    {
        try {
            // جلب الوجبة من قاعدة البيانات
            $menuItem = \App\Models\MenuItem::find($id);
            
            if (!$menuItem) {
                return response()->json([
                    'success' => false,
                    'message' => 'الوجبة غير موجودة'
                ], 404);
            }

            // جلب المطعم المرتبط بالوجبة
            $restaurant = $menuItem->restaurant;

            // تحويل البيانات إلى الصيغة المطلوبة
            $menuItemData = [
                'id' => $menuItem->id,
                'restaurant_id' => $menuItem->restaurant_id,
                'name' => $menuItem->name,
                'name_ar' => $menuItem->name,
                'description' => $menuItem->description ?? '',
                'description_ar' => $menuItem->description ?? '',
                'price' => (float)$menuItem->price,
                'category' => $menuItem->category ?? 'أطباق رئيسية',
                'category_ar' => $menuItem->category ?? 'أطباق رئيسية',
                'image' => $menuItem->image ? asset('storage/' . $menuItem->image) : null,
                'image_url' => $menuItem->image ? asset('storage/' . $menuItem->image) : null,
                'is_available' => (bool)$menuItem->is_available,
                'is_popular' => (bool)($menuItem->is_popular ?? false),
                'preparation_time' => $menuItem->preparation_time_minutes ?? 20,
                'preparation_time_minutes' => $menuItem->preparation_time_minutes ?? 20,
                'ingredients' => $menuItem->ingredients ? (is_string($menuItem->ingredients) ? $menuItem->ingredients : json_encode($menuItem->ingredients)) : null,
                'allergens' => $menuItem->allergens ? (is_string($menuItem->allergens) ? $menuItem->allergens : json_encode($menuItem->allergens)) : null,
                'calories' => $menuItem->calories ? (float)$menuItem->calories : null,
                'restaurant' => $restaurant ? [
                    'id' => $restaurant->id,
                    'name' => $restaurant->name,
                    'logo' => $restaurant->logo ? asset('storage/' . $restaurant->logo) : null,
                ] : null,
            ];

            return response()->json([
                'success' => true,
                'menu_item' => $menuItemData,
                'message' => 'تم جلب تفاصيل الوجبة بنجاح'
            ], 200, [], JSON_UNESCAPED_UNICODE);

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في جلب تفاصيل الوجبة: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * إنشاء طلب طعام جديد
     */
    public function createOrder(Request $request): JsonResponse
    {
        try {
            $user = $request->user();
            
            if (!$user) {
                return response()->json([
                    'success' => false,
                    'message' => 'يجب تسجيل الدخول أولاً'
                ], 401);
            }

            $request->validate([
                'restaurant_id' => 'required|exists:restaurants,id',
                'items' => 'required|array|min:1',
                'items.*.menu_item_id' => 'required|exists:menu_items,id',
                'items.*.quantity' => 'required|integer|min:1',
                'items.*.special_instructions' => 'nullable|string|max:500',
                'delivery_address' => 'required|string',
                'payment_method' => 'required|in:cash,card,online',
                'special_instructions' => 'nullable|string|max:1000',
            ]);

            $restaurant = \App\Models\Restaurant::findOrFail($request->restaurant_id);

            // التأكد من أن المطعم مفتوح
            if (!$restaurant->is_open) {
                return response()->json([
                    'success' => false,
                    'message' => 'المطعم مغلق حالياً'
                ], 400);
            }

            \DB::beginTransaction();

            $items = $request->items;
            $subtotal = 0;
            $deliveryFee = $restaurant->delivery_fee ?? 5000;
            
            // حساب المجموع الفرعي
            foreach ($items as $item) {
                $menuItem = \App\Models\MenuItem::findOrFail($item['menu_item_id']);
                $subtotal += $menuItem->price * $item['quantity'];
            }

            // حساب الضريبة (5%)
            $taxAmount = $subtotal * 0.05;
            $total = $subtotal + $deliveryFee + $taxAmount;

            // إنشاء الطلب
            $order = \App\Models\FoodOrder::create([
                'customer_id' => $user->id,
                'restaurant_id' => $restaurant->id,
                'order_number' => 'FOOD-' . time() . '-' . $user->id,
                'subtotal' => $subtotal,
                'delivery_fee' => $deliveryFee,
                'tax' => $taxAmount,
                'total' => $total,
                'delivery_address' => $request->delivery_address,
                'delivery_latitude' => $request->delivery_latitude,
                'delivery_longitude' => $request->delivery_longitude,
                'notes' => $request->special_instructions ?? $request->notes,
                'payment_method' => $request->payment_method,
                'status' => 'pending',
            ]);

            // إنشاء تفاصيل الطلب
            foreach ($items as $item) {
                $menuItem = \App\Models\MenuItem::findOrFail($item['menu_item_id']);

                \App\Models\FoodOrderItem::create([
                    'food_order_id' => $order->id,
                    'menu_item_id' => $menuItem->id,
                    'quantity' => $item['quantity'],
                    'unit_price' => $menuItem->price,
                    'total_price' => $menuItem->price * $item['quantity'],
                    'special_instructions' => $item['special_instructions'] ?? null,
                ]);
            }

            \DB::commit();

            $order->load(['restaurant', 'orderItems.menuItem']);

            return response()->json([
                'success' => true,
                'message' => 'تم إنشاء طلب الطعام بنجاح',
                'data' => $order
            ], 201);

        } catch (\Illuminate\Validation\ValidationException $e) {
            \DB::rollBack();
            return response()->json([
                'success' => false,
                'message' => 'خطأ في التحقق من البيانات',
                'errors' => $e->errors()
            ], 422);
        } catch (\Exception $e) {
            \DB::rollBack();
            \Log::error('خطأ في إنشاء طلب الطعام: ' . $e->getMessage());
            return response()->json([
                'success' => false,
                'message' => 'خطأ في إنشاء الطلب: ' . $e->getMessage()
            ], 500);
        }
    }
}