<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage; // Added for file handling
use App\Models\User;
use App\Models\Driver;
use App\Models\Passenger;
use App\Models\Trip;
use App\Models\Payment;
use App\Models\Restaurant;
use App\Models\MenuItem;
use App\Models\FoodOrder;
use App\Models\GasCylinder;
use App\Models\GasOrder;
use App\Models\GasOffice;
use App\Models\Vehicle;
use App\Models\TripRequest;

class AdminController extends Controller
{
    /**
     * عرض لوحة التحكم الرئيسية
     */
    public function dashboard()
    {
        // إحصائيات عامة
        $stats = [
            'total_users' => User::count(),
            'total_drivers' => Driver::count(),
            'total_passengers' => Passenger::count(),
            'total_trips' => Trip::count(),
            'total_restaurants' => Restaurant::count(),
            'total_gas_cylinders' => GasCylinder::count(),
            'total_gas_offices' => GasOffice::count(),
            'total_vehicles' => Vehicle::count(),
        ];

        // إحصائيات المبيعات
        $revenue = [
            'today' => Payment::whereDate('created_at', today())->sum('amount'),
            'week' => Payment::whereBetween('created_at', [now()->startOfWeek(), now()->endOfWeek()])->sum('amount'),
            'month' => Payment::whereMonth('created_at', now()->month)->sum('amount'),
            'total' => Payment::sum('amount'),
        ];

        // الرحلات الأخيرة
        $recent_trips = Trip::with(['driver', 'passenger'])
            ->latest()
            ->take(10)
            ->get();

        // الطلبات الأخيرة
        $recent_food_orders = FoodOrder::with(['restaurant', 'user'])
            ->latest()
            ->take(10)
            ->get();

        $recent_gas_orders = GasOrder::with(['customer', 'gasOffice'])
            ->latest()
            ->take(10)
            ->get();

        return view('admin.dashboard', compact(
            'stats',
            'revenue',
            'recent_trips',
            'recent_food_orders',
            'recent_gas_orders'
        ));
    }

    /**
     * إدارة المستخدمين
     */
    public function users()
    {
        $users = User::with(['driver', 'passenger', 'governorate', 'city'])->paginate(10);
        return view('admin.users.index', compact('users'));
    }

    public function createUser()
    {
        return view('admin.users.create');
    }

    public function storeUser(Request $request)
    {
        try {
            // تسجيل محاولة إنشاء مستخدم جديد
            \Log::info('محاولة إنشاء مستخدم جديد', [
                'email' => $request->email,
                'user_type' => $request->user_type,
                'ip' => $request->ip(),
                'user_agent' => $request->userAgent()
            ]);

            $rules = [
                'name' => 'required|string|max:255',
                'email' => 'required|string|email|max:255|unique:users',
                'phone' => 'required|string|max:20',
                'password' => 'required|string|min:8|confirmed',
                'service_type' => 'nullable|string|in:taxi,restaurant,gas,all',
                'status' => 'required|string|in:active,inactive,suspended',
                'user_type' => 'required|string|in:passenger,driver,admin,restaurant_manager,gas_manager',
                'profile_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
                'notes' => 'nullable|string|max:1000',
                'governorate_id' => 'nullable|exists:governorates,id',
                'city_id' => 'nullable|exists:cities,id',
                'address' => 'nullable|string|max:500',
                'license_number' => 'nullable|string|max:100',
                'vehicle_type' => 'nullable|string|in:sedan,suv,van,motorcycle',
                'experience_years' => 'nullable|integer|min:0|max:50',
                'is_available' => 'nullable|boolean',
            ];

            $validated = $request->validate($rules);

            // بدء المعاملة
            DB::beginTransaction();

            try {
                $userData = $request->only([
                    'name', 'email', 'phone', 'status', 'user_type', 'notes', 
                    'governorate_id', 'city_id', 'address'
                ]);
                
                // تحديد service_type تلقائياً بناءً على user_type
                if ($request->user_type === 'restaurant_manager') {
                    $userData['service_type'] = 'restaurant';
                } elseif ($request->user_type === 'gas_manager') {
                    $userData['service_type'] = 'gas';
                } else {
                    $userData['service_type'] = $request->service_type ?? 'taxi';
                }
                
                $userData['password'] = Hash::make($request->password);

                // معالجة صورة الملف الشخصي
                if ($request->hasFile('profile_image')) {
                    $imagePath = $request->file('profile_image')->store('profile_images', 'public');
                    $userData['profile_image'] = $imagePath;
                }

                $user = User::create($userData);

                // إنشاء معلومات السائق إذا كان الدور سائق
                if ($request->user_type === 'driver') {
                    $driverData = [
                        'user_id' => $user->id,
                        'license_number' => $request->license_number,
                        'vehicle_type' => $request->vehicle_type,
                        'experience_years' => $request->experience_years,
                        'is_available' => $request->is_available ? true : false,
                        'license_expiry' => null, // سيتم تعيينه لاحقاً
                        'national_id' => null, // سيتم تعيينه لاحقاً
                        'phone' => $user->phone, // استخدام رقم هاتف المستخدم
                        'emergency_contact' => null, // سيتم تعيينه لاحقاً
                        'rating' => 0.00, // تقييم افتراضي
                        'total_trips' => 0, // عدد الرحلات افتراضي
                        'is_verified' => false, // غير موثق افتراضياً
                        'is_active' => true, // نشط افتراضياً
                    ];

                    $user->driver()->create($driverData);
                }

                // تأكيد المعاملة
                DB::commit();

                // تسجيل النجاح
                \Log::info('تم إنشاء المستخدم بنجاح', [
                    'user_id' => $user->id,
                    'email' => $user->email,
                    'user_type' => $user->user_type
                ]);

                return redirect()->route('admin.users')->with('success', 'تم إنشاء المستخدم بنجاح');

            } catch (\Exception $e) {
                // التراجع عن المعاملة
                DB::rollBack();
                throw $e;
            }

        } catch (\Illuminate\Validation\ValidationException $e) {
            \Log::warning('فشل في التحقق من صحة البيانات', [
                'errors' => $e->errors(),
                'email' => $request->email
            ]);

            return redirect()->back()->withInput()->withErrors($e->errors())->with('error', 'يرجى تصحيح الأخطاء في النموذج');
        } catch (\Exception $e) {
            \Log::error('خطأ في إنشاء المستخدم', [
                'error' => $e->getMessage(),
                'email' => $request->email
            ]);

            return redirect()->back()->withInput()->with('error', 'حدث خطأ أثناء إنشاء المستخدم: ' . $e->getMessage());
        }
    }

    public function showUser($id)
    {
        $user = User::with(['driver', 'driverTrips', 'passengerTrips', 'driverPayments', 'passengerPayments', 'governorate', 'city'])->findOrFail($id);
        return view('admin.users.show', compact('user'));
    }

    public function editUser($id)
    {
        $user = User::with(['driver', 'governorate', 'city'])->findOrFail($id);
        return view('admin.users.edit', compact('user'));
    }

    public function updateUser(Request $request, $id)
    {
        try {
            // تسجيل محاولة تحديث المستخدم
            \Log::info('محاولة تحديث مستخدم', [
                'user_id' => $id,
                'email' => $request->email,
                'user_type' => $request->user_type,
                'ip' => $request->ip(),
                'user_agent' => $request->userAgent()
            ]);

            $user = User::findOrFail($id);

            $rules = [
                'name' => 'required|string|max:255',
                'email' => 'required|string|email|max:255|unique:users,email,' . $id,
                'phone' => 'required|string|max:20',
                'password' => 'nullable|string|min:8|confirmed',
                'service_type' => 'nullable|string|in:taxi,restaurant,gas,all',
                'status' => 'required|string|in:active,inactive,suspended',
                'user_type' => 'required|string|in:passenger,driver,admin,restaurant_manager,gas_manager',
                'profile_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
                'notes' => 'nullable|string|max:1000',
                'license_number' => 'nullable|string|max:100',
                'vehicle_type' => 'nullable|string|in:sedan,suv,van,motorcycle',
                'experience_years' => 'nullable|integer|min:0|max:50',
                'is_available' => 'nullable|boolean',
            ];

            $validated = $request->validate($rules);

            // بدء المعاملة
            DB::beginTransaction();

            try {
                $userData = $request->only([
                    'name', 'email', 'phone', 'status', 'user_type', 'notes', 
                    'governorate_id', 'city_id', 'address'
                ]);
                
                // تحديد service_type تلقائياً بناءً على user_type
                if ($request->user_type === 'restaurant_manager') {
                    $userData['service_type'] = 'restaurant';
                } elseif ($request->user_type === 'gas_manager') {
                    $userData['service_type'] = 'gas';
                } else {
                    $userData['service_type'] = $request->service_type ?? 'taxi';
                }

                // تحديث كلمة المرور فقط إذا تم إدخالها
                if ($request->filled('password')) {
                    $userData['password'] = Hash::make($request->password);
                }

                // معالجة صورة الملف الشخصي
                if ($request->hasFile('profile_image')) {
                    // حذف الصورة القديمة
                    if ($user->profile_image) {
                        Storage::disk('public')->delete($user->profile_image);
                    }
                    $imagePath = $request->file('profile_image')->store('profile_images', 'public');
                    $userData['profile_image'] = $imagePath;
                }

                $user->update($userData);

                // تحديث معلومات السائق
                if ($request->user_type === 'driver') {
                    $driverData = [
                        'license_number' => $request->license_number,
                        'vehicle_type' => $request->vehicle_type,
                        'experience_years' => $request->experience_years,
                        'is_available' => $request->is_available ? true : false,
                    ];

                    // السماح بقيم فارغة - السائق سيقوم بتعبئتها لاحقاً
                    if ($user->driver) {
                        $user->driver->update($driverData);
                    } else {
                        // إضافة القيم الافتراضية المطلوبة
                        $driverData['user_id'] = $user->id;
                        $driverData['license_expiry'] = null; // سيتم تعيينه لاحقاً
                        $driverData['license_number'] = $request->license_number;
                        $driverData['national_id'] = null; // سيتم تعيينه لاحقاً
                        $driverData['phone'] = $user->phone; // استخدام رقم هاتف المستخدم
                        $driverData['emergency_contact'] = null; // سيتم تعيينه لاحقاً
                        $driverData['rating'] = 0.00; // تقييم افتراضي
                        $driverData['total_trips'] = 0; // عدد الرحلات افتراضي
                        $driverData['is_verified'] = false; // غير موثق افتراضياً
                        $driverData['is_active'] = true; // نشط افتراضياً

                        $user->driver()->create($driverData);
                    }
                } else {
                    // إذا تم تغيير نوع المستخدم من سائق إلى آخر، احذف معلومات السائق
                    if ($user->driver) {
                        $user->driver->delete();
                    }
                }

                // تأكيد المعاملة
                DB::commit();

                // تسجيل النجاح
                \Log::info('تم تحديث المستخدم بنجاح', [
                    'user_id' => $user->id,
                    'email' => $user->email,
                    'user_type' => $user->user_type
                ]);

                return redirect()->route('admin.users')->with('success', 'تم تحديث المستخدم بنجاح');

            } catch (\Exception $e) {
                // التراجع عن المعاملة
                DB::rollBack();
                throw $e;
            }

        } catch (\Illuminate\Validation\ValidationException $e) {
            \Log::warning('فشل في التحقق من صحة البيانات', [
                'errors' => $e->errors(),
                'email' => $request->email
            ]);

            return redirect()->back()->withInput()->withErrors($e->errors())->with('error', 'يرجى تصحيح الأخطاء في النموذج');
        } catch (\Exception $e) {
            \Log::error('خطأ في تحديث المستخدم', [
                'error' => $e->getMessage(),
                'email' => $request->email
            ]);

            return redirect()->back()->withInput()->with('error', 'حدث خطأ أثناء تحديث المستخدم: ' . $e->getMessage());
        }
    }

    public function deleteUser($id)
    {
        $user = User::findOrFail($id);

        // حذف صورة الملف الشخصي
        if ($user->profile_image) {
            Storage::disk('public')->delete($user->profile_image);
        }

        // حذف معلومات السائق
        if ($user->driver) {
            $user->driver->delete();
        }

        $user->delete();

        return redirect()->route('admin.users')->with('success', 'تم حذف المستخدم بنجاح');
    }

    /**
     * تحديث حالة المستخدم
     */
    public function updateUserStatus(Request $request, $id)
    {
        $user = User::findOrFail($id);
        $user->update(['status' => $request->status]);

        return redirect()->back()->with('success', 'تم تحديث حالة المستخدم بنجاح');
    }

    /**
     * إدارة السائقين
     */
    public function drivers(Request $request)
    {
        // تغيير المنطق ليعرض جميع المستخدمين من نوع driver
        $query = User::with(['driver', 'driver.vehicle'])
            ->where('user_type', 'driver');

        // فلتر البحث بالاسم
        if ($request->filled('name')) {
            $query->where('name', 'like', '%' . $request->name . '%');
        }

        // فلتر الحالة
        if ($request->filled('status')) {
            $query->where('status', $request->status);
        }

        // فلتر التوفر
        if ($request->filled('availability')) {
            $query->whereHas('driver', function($q) use ($request) {
                $q->where('is_available', $request->availability);
            });
        }

        // فلتر نوع الخدمة
        if ($request->filled('service')) {
            $query->where('service_type', $request->service);
        }

        // فلتر التوثيق
        if ($request->filled('verified')) {
            $query->whereHas('driver', function($q) use ($request) {
                $q->where('is_verified', $request->verified);
            });
        }

        // فلتر النشاط
        if ($request->filled('active')) {
            $query->whereHas('driver', function($q) use ($request) {
                $q->where('is_active', $request->active);
            });
        }

        // فلتر المنطقة
        if ($request->filled('area')) {
            $query->whereHas('driver', function($q) use ($request) {
                $q->where('current_address', 'like', '%' . $request->area . '%');
            });
        }

        $drivers = $query->latest()->paginate(10);

        // إحصائيات السائقين - تحديث لتشمل جميع المستخدمين من نوع driver
        $stats = [
            'total' => User::where('user_type', 'driver')->count(),
            'available' => User::where('user_type', 'driver')->whereHas('driver', function($q) {
                $q->where('is_available', true);
            })->count(),
            'verified' => User::where('user_type', 'driver')->whereHas('driver', function($q) {
                $q->where('is_verified', true);
            })->count(),
            'active' => User::where('user_type', 'driver')->whereHas('driver', function($q) {
                $q->where('is_active', true);
            })->count(),
            'by_service' => [
                'taxi' => User::where('user_type', 'driver')->where('service_type', 'taxi')->count(),
                'restaurant' => User::where('user_type', 'driver')->where('service_type', 'restaurant')->count(),
                'gas' => User::where('user_type', 'driver')->where('service_type', 'gas')->count(),
                'all' => User::where('user_type', 'driver')->where('service_type', 'all')->count(),
            ]
        ];

        return view('admin.drivers.index', compact('drivers', 'stats'));
    }

    /**
     * تغيير حالة توفر السائق
     */
    public function toggleDriverAvailability($id)
    {
        $driver = Driver::findOrFail($id);
        $driver->update(['is_available' => !$driver->is_available]);

        return response()->json([
            'success' => true,
            'is_available' => $driver->is_available,
            'message' => $driver->is_available ? 'تم تفعيل توفر السائق' : 'تم إلغاء توفر السائق'
        ]);
    }

    /**
     * عرض تفاصيل السائق
     */
    public function showDriver($id)
    {
        $driver = User::with([
            'driver.vehicle',
            'driver.trips' => function($query) {
                $query->latest()->limit(10);
            },
            'driver.trips.passenger',
            'driver.trips.payment',
            'driver.location'
        ])->where('user_type', 'driver')->findOrFail($id);

        // إحصائيات السائق
        $stats = [
            'total_trips' => $driver->driver->trips->count(),
            'completed_trips' => $driver->driver->trips->where('status', 'completed')->count(),
            'total_earnings' => $driver->driver->trips->where('status', 'completed')->sum('fare'),
            'average_rating' => $driver->driver->rating ?? 0,
            'total_distance' => $driver->driver->trips->where('status', 'completed')->sum('distance'),
            'active_trips' => $driver->driver->trips->whereIn('status', ['pending', 'accepted', 'started'])->count(),
        ];

        // الرحلات الأخيرة
        $recent_trips = $driver->driver->trips->take(5);

        return view('admin.drivers.show', compact('driver', 'stats', 'recent_trips'));
    }

    /**
     * تعديل معلومات السائق
     */
    public function editDriver($id)
    {
        $driver = User::with(['driver.vehicle'])->where('user_type', 'driver')->findOrFail($id);
        $vehicles = Vehicle::where('is_active', true)->get();

        return view('admin.drivers.edit', compact('driver', 'vehicles'));
    }

    /**
     * تحديث معلومات السائق
     */
    public function updateDriver(Request $request, $id)
    {
        $driver = User::with('driver')->where('user_type', 'driver')->findOrFail($id);

        $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|email|unique:users,email,' . $id,
            'phone' => 'nullable|string|max:20',
            'license_number' => 'nullable|string|max:100',
            'license_expiry' => 'nullable|date|after:today',
            'national_id' => 'nullable|string|max:100',
            'emergency_contact' => 'nullable|string|max:100',
            'vehicle_id' => 'nullable|exists:vehicles,id',
            'current_address' => 'nullable|string|max:500',
            'service_areas' => 'nullable|array',
            'is_verified' => 'boolean',
            'is_active' => 'boolean',
            'is_available' => 'boolean',
        ]);

        // تحديث معلومات المستخدم
        $driver->update([
            'name' => $request->name,
            'email' => $request->email,
        ]);

        // تحديث أو إنشاء سجل السائق
        if ($driver->driver) {
            $driver->driver->update([
                'phone' => $request->phone,
                'license_number' => $request->license_number,
                'license_expiry' => $request->license_expiry,
                'national_id' => $request->national_id,
                'emergency_contact' => $request->emergency_contact,
                'vehicle_id' => $request->vehicle_id,
                'current_address' => $request->current_address,
                'service_areas' => $request->service_areas,
                'is_verified' => $request->is_verified,
                'is_active' => $request->is_active,
                'is_available' => $request->is_available,
            ]);
        } else {
            Driver::create([
                'user_id' => $driver->id,
                'phone' => $request->phone,
                'license_number' => $request->license_number,
                'license_expiry' => $request->license_expiry,
                'national_id' => $request->national_id,
                'emergency_contact' => $request->emergency_contact,
                'vehicle_id' => $request->vehicle_id,
                'current_address' => $request->current_address,
                'service_areas' => $request->service_areas,
                'is_verified' => $request->is_verified,
                'is_active' => $request->is_active,
                'is_available' => $request->is_available,
                'rating' => 0.0,
                'total_trips' => 0,
            ]);
        }

        return redirect()->route('admin.drivers.show', $id)
            ->with('success', 'تم تحديث معلومات السائق بنجاح');
    }

    /**
     * تغيير حالة توثيق السائق
     */
    public function toggleDriverVerification($id)
    {
        $driver = Driver::findOrFail($id);
        $driver->update(['is_verified' => !$driver->is_verified]);

        return response()->json([
            'success' => true,
            'is_verified' => $driver->is_verified,
            'message' => $driver->is_verified ? 'تم توثيق السائق' : 'تم إلغاء توثيق السائق'
        ]);
    }

    /**
     * تحديث حالة السائق
     */
    public function updateDriverStatus(Request $request, $id)
    {
        $driver = Driver::findOrFail($id);
        $driver->update(['is_active' => $request->status === 'active']);

        return response()->json([
            'success' => true,
            'is_active' => $driver->is_active,
            'message' => $driver->is_active ? 'تم تفعيل السائق' : 'تم إلغاء تفعيل السائق'
        ]);
    }

    /**
     * تغيير حالة توثيق الراكب
     */
    public function togglePassengerVerification($id)
    {
        $passenger = User::where('id', $id)->where('user_type', 'passenger')->firstOrFail();

        // تحديث حالة التوثيق في جدول المستخدمين
        $passenger->update(['is_verified' => !$passenger->is_verified]);

        return response()->json([
            'success' => true,
            'is_verified' => $passenger->is_verified,
            'message' => $passenger->is_verified ? 'تم توثيق الراكب' : 'تم إلغاء توثيق الراكب'
        ]);
    }

    /**
     * تغيير حالة نشاط الراكب
     */
    public function togglePassengerActive($id)
    {
        $passenger = User::where('id', $id)->where('user_type', 'passenger')->firstOrFail();

        if ($passenger->passenger) {
            $passenger->passenger->update(['is_active' => !$passenger->passenger->is_active]);

            return response()->json([
                'success' => true,
                'is_active' => $passenger->passenger->is_active,
                'message' => $passenger->passenger->is_active ? 'تم تفعيل الراكب' : 'تم إلغاء تفعيل الراكب'
            ]);
        }

        return response()->json([
            'success' => false,
            'message' => 'لم يتم العثور على بيانات الراكب'
        ]);
    }

    /**
     * إدارة الركاب
     */
    public function passengers(Request $request)
    {
        // تغيير المنطق ليعرض جميع المستخدمين من نوع passenger
        $query = User::with(['passenger'])
            ->where('user_type', 'passenger');

        // فلتر البحث بالاسم
        if ($request->filled('name')) {
            $query->where('name', 'like', '%' . $request->name . '%');
        }

        // فلتر الحالة
        if ($request->filled('status')) {
            $query->where('status', $request->status);
        }

        // فلتر نوع الخدمة
        if ($request->filled('service')) {
            $query->where('service_type', $request->service);
        }

        // فلتر التوثيق
        if ($request->filled('verified')) {
            $query->where('is_verified', $request->verified);
        }

        // فلتر النشاط
        if ($request->filled('active')) {
            $query->whereHas('passenger', function($q) use ($request) {
                $q->where('is_active', $request->active);
            });
        }

        $passengers = $query->latest()->paginate(10);

        // إحصائيات الركاب
        $stats = [
            'total' => User::where('user_type', 'passenger')->count(),
            'verified' => User::where('user_type', 'passenger')->where('is_verified', true)->count(),
            'active' => User::where('user_type', 'passenger')->whereHas('passenger', function($q) {
                $q->where('is_active', true);
            })->count(),
            'by_service' => [
                'taxi' => User::where('user_type', 'passenger')->where('service_type', 'taxi')->count(),
                'restaurant' => User::where('user_type', 'passenger')->where('service_type', 'restaurant')->count(),
                'gas' => User::where('user_type', 'passenger')->where('service_type', 'gas')->count(),
                'all' => User::where('user_type', 'passenger')->where('service_type', 'all')->count(),
            ]
        ];

        return view('admin.passengers.index', compact('passengers', 'stats'));
    }

    /**
     * إدارة الرحلات
     */
    public function trips(Request $request)
    {
        $query = Trip::with(['driver', 'passenger', 'payment']);

        // فلتر البحث بحالة الرحلة
        if ($request->filled('status')) {
            $query->where('status', $request->status);
        }

        // فلتر البحث بالسائق
        if ($request->filled('driver')) {
            $query->whereHas('driver', function($q) use ($request) {
                $q->where('name', 'like', '%' . $request->driver . '%');
            });
        }

        // فلتر البحث بالراكب
        if ($request->filled('passenger')) {
            $query->whereHas('passenger', function($q) use ($request) {
                $q->where('name', 'like', '%' . $request->passenger . '%');
            });
        }

        // فلتر البحث بالتاريخ
        if ($request->filled('date')) {
            $query->whereDate('created_at', $request->date);
        }

        $trips = $query->latest()->paginate(10);

        return view('admin.trips.index', compact('trips'));
    }

    /**
     * إدارة طلبات الرحلات
     */
    public function tripRequests(Request $request)
    {
        $query = TripRequest::with(['passenger', 'driver']);

        // فلتر البحث بحالة الطلب
        if ($request->filled('status')) {
            $query->where('status', $request->status);
        }

        // فلتر البحث بالراكب
        if ($request->filled('passenger')) {
            $query->whereHas('passenger', function($q) use ($request) {
                $q->where('name', 'like', '%' . $request->passenger . '%');
            });
        }

        // فلتر البحث بالسائق
        if ($request->filled('driver')) {
            $query->whereHas('driver', function($q) use ($request) {
                $q->where('name', 'like', '%' . $request->driver . '%');
            });
        }

        // فلتر البحث بالتاريخ
        if ($request->filled('date')) {
            $query->whereDate('created_at', $request->date);
        }

        $tripRequests = $query->latest()->paginate(10);

        return view('admin.trip-requests.index', compact('tripRequests'));
    }

    /**
     * إدارة المطاعم
     */
    public function restaurants(Request $request)
    {
        $query = Restaurant::with(['user', 'menuItems', 'foodOrders']);

        // فلتر البحث بالاسم
        if ($request->filled('name')) {
            $query->where('name', 'like', '%' . $request->name . '%');
        }

        // فلتر الحالة
        if ($request->filled('status')) {
            $query->where('is_active', $request->status);
        }

        // فلتر نوع المطبخ
        if ($request->filled('cuisine')) {
            $query->where('cuisine_type', $request->cuisine);
        }

        // فلتر حالة الفتح
        if ($request->filled('open')) {
            $query->where('is_open', $request->open);
        }

        // فلتر المنطقة
        if ($request->filled('area')) {
            $query->where('address', 'like', '%' . $request->area . '%');
        }

        $restaurants = $query->latest()->paginate(10);

        // إحصائيات المطاعم
        $stats = [
            'total' => Restaurant::count(),
            'active' => Restaurant::where('is_active', true)->count(),
            'open' => Restaurant::where('is_open', true)->count(),
            'total_menu_items' => MenuItem::count(),
            'total_orders' => FoodOrder::count(),
            'by_cuisine' => [
                'arabic' => Restaurant::where('cuisine_type', 'arabic')->count(),
                'international' => Restaurant::where('cuisine_type', 'international')->count(),
                'fast_food' => Restaurant::where('cuisine_type', 'fast_food')->count(),
                'seafood' => Restaurant::where('cuisine_type', 'seafood')->count(),
                'other' => Restaurant::whereNotIn('cuisine_type', ['arabic', 'international', 'fast_food', 'seafood'])->count(),
            ]
        ];

        return view('admin.restaurants.index', compact('restaurants', 'stats'));
    }

    /**
     * تغيير حالة نشاط المطعم
     */
    public function toggleRestaurantActive($id)
    {
        $restaurant = Restaurant::findOrFail($id);
        $restaurant->update(['is_active' => !$restaurant->is_active]);

        return response()->json([
            'success' => true,
            'is_active' => $restaurant->is_active,
            'message' => $restaurant->is_active ? 'تم تفعيل المطعم' : 'تم إلغاء تفعيل المطعم'
        ]);
    }

    /**
     * تغيير حالة فتح المطعم
     */
    public function toggleRestaurantOpen($id)
    {
        $restaurant = Restaurant::findOrFail($id);
        $restaurant->update(['is_open' => !$restaurant->is_open]);

        return response()->json([
            'success' => true,
            'is_open' => $restaurant->is_open,
            'message' => $restaurant->is_open ? 'تم فتح المطعم' : 'تم إغلاق المطعم'
        ]);
    }

    /**
     * إنشاء مطعم جديد
     */
    public function createRestaurant()
    {
        return view('admin.restaurants.create');
    }

    /**
     * حفظ مطعم جديد
     */
    public function storeRestaurant(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'address' => 'required|string|max:500',
            'latitude' => 'nullable|numeric',
            'longitude' => 'nullable|numeric',
            'phone' => 'required|string|max:20',
            'email' => 'nullable|email|max:255',
            'owner_id' => 'nullable|exists:users,id',
            'cuisine_type' => 'required|in:arabic,international,fast_food,seafood,other',
            'logo' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'cover_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'is_active' => 'boolean',
            'is_open' => 'boolean',
            'opening_time' => 'nullable|date_format:H:i',
            'closing_time' => 'nullable|date_format:H:i',
            'delivery_fee' => 'nullable|numeric|min:0',
            'delivery_time_minutes' => 'nullable|integer|min:0',
            'minimum_order' => 'nullable|numeric|min:0',
        ]);

        if ($request->hasFile('logo')) {
            $validated['logo'] = $request->file('logo')->store('restaurants/logos', 'public');
        }

        if ($request->hasFile('cover_image')) {
            $validated['cover_image'] = $request->file('cover_image')->store('restaurants/covers', 'public');
        }

        Restaurant::create($validated);

        return redirect()->route('admin.restaurants')->with('success', 'تم إنشاء المطعم بنجاح');
    }

    /**
     * عرض تفاصيل المطعم
     */
    public function showRestaurant($id)
    {
        $restaurant = Restaurant::with([
            'user', 
            'menuItems', 
            'foodOrders' => function($query) {
                $query->with(['customer', 'orderItems.menuItem'])->latest()->take(10);
            }
        ])->findOrFail($id);
        return view('admin.restaurants.show', compact('restaurant'));
    }

    /**
     * تعديل المطعم
     */
    public function editRestaurant($id)
    {
        $restaurant = Restaurant::findOrFail($id);
        return view('admin.restaurants.edit', compact('restaurant'));
    }

    /**
     * تحديث المطعم
     */
    public function updateRestaurant(Request $request, $id)
    {
        $restaurant = Restaurant::findOrFail($id);

        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'address' => 'required|string|max:500',
            'latitude' => 'nullable|numeric',
            'longitude' => 'nullable|numeric',
            'phone' => 'required|string|max:20',
            'email' => 'nullable|email|max:255',
            'owner_id' => 'nullable|exists:users,id',
            'cuisine_type' => 'required|in:arabic,international,fast_food,seafood,other',
            'logo' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'cover_image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'is_active' => 'boolean',
            'is_open' => 'boolean',
            'opening_time' => 'nullable|date_format:H:i',
            'closing_time' => 'nullable|date_format:H:i',
            'delivery_fee' => 'nullable|numeric|min:0',
            'delivery_time_minutes' => 'nullable|integer|min:0',
            'minimum_order' => 'nullable|numeric|min:0',
        ]);

        if ($request->hasFile('logo')) {
            // حذف الصورة القديمة
            if ($restaurant->logo) {
                Storage::disk('public')->delete($restaurant->logo);
            }
            $validated['logo'] = $request->file('logo')->store('restaurants/logos', 'public');
        }

        if ($request->hasFile('cover_image')) {
            // حذف الصورة القديمة
            if ($restaurant->cover_image) {
                Storage::disk('public')->delete($restaurant->cover_image);
            }
            $validated['cover_image'] = $request->file('cover_image')->store('restaurants/covers', 'public');
        }

        $restaurant->update($validated);

        return redirect()->route('admin.restaurants')->with('success', 'تم تحديث المطعم بنجاح');
    }

    /**
     * حذف المطعم
     */
    public function deleteRestaurant($id)
    {
        $restaurant = Restaurant::findOrFail($id);

        // حذف الصور
        if ($restaurant->logo) {
            Storage::disk('public')->delete($restaurant->logo);
        }
        if ($restaurant->cover_image) {
            Storage::disk('public')->delete($restaurant->cover_image);
        }

        $restaurant->delete();

        return response()->json(['success' => true, 'message' => 'تم حذف المطعم بنجاح']);
    }

    /**
     * إدارة الغاز
     */
    public function gas()
    {
        $cylinders = GasCylinder::with(['gasOffice', 'orderItems'])
            ->latest()
            ->paginate(10);

        return view('admin.gas.index', compact('cylinders'));
    }

    /**
     * إنشاء قنينة غاز جديدة
     */
    public function createGas()
    {
        $gasOffices = GasOffice::all();
        return view('admin.gas.create', compact('gasOffices'));
    }

    /**
     * حفظ قنينة غاز جديدة
     */
    public function storeGas(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'price' => 'required|numeric|min:0',
            'size' => 'required|string|in:12,25,50',
            'type' => 'required|string|in:طبخ,تدفئة,صناعي',
            'material' => 'required|string|in:بلاستك,حديد',
            'brand' => 'nullable|string|max:255',
            'image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'gas_office_id' => 'required|exists:gas_offices,id',
            'is_available' => 'boolean',
            'stock_quantity' => 'required|integer|min:0',
            'weight_kg' => 'required|numeric|min:0',
            'safety_instructions' => 'nullable|string',
        ]);

        $data = $request->all();
        $data['is_available'] = $request->has('is_available');

        if ($request->hasFile('image')) {
            $imagePath = $request->file('image')->store('gas-cylinders', 'public');
            $data['image'] = $imagePath;
        }

        GasCylinder::create($data);

        return redirect()->route('admin.gas')->with('success', 'تم إضافة قنينة الغاز بنجاح');
    }

    /**
     * عرض قنينة غاز
     */
    public function showGas($id)
    {
        $cylinder = GasCylinder::with(['gasOffice', 'orderItems'])->findOrFail($id);
        return view('admin.gas.show', compact('cylinder'));
    }

    /**
     * تعديل قنينة غاز
     */
    public function editGas($id)
    {
        $cylinder = GasCylinder::findOrFail($id);
        $gasOffices = GasOffice::all();
        return view('admin.gas.edit', compact('cylinder', 'gasOffices'));
    }

    /**
     * تحديث قنينة غاز
     */
    public function updateGas(Request $request, $id)
    {
        $cylinder = GasCylinder::findOrFail($id);

        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'price' => 'required|numeric|min:0',
            'size' => 'required|string|in:12,25,50',
            'type' => 'required|string|in:طبخ,تدفئة,صناعي',
            'material' => 'required|string|in:بلاستك,حديد',
            'brand' => 'nullable|string|max:255',
            'image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048',
            'gas_office_id' => 'required|exists:gas_offices,id',
            'is_available' => 'boolean',
            'stock_quantity' => 'required|integer|min:0',
            'weight_kg' => 'required|numeric|min:0',
            'safety_instructions' => 'nullable|string',
        ]);

        $data = $request->all();
        $data['is_available'] = $request->has('is_available');

        if ($request->hasFile('image')) {
            // حذف الصورة القديمة
            if ($cylinder->image) {
                Storage::disk('public')->delete($cylinder->image);
            }
            $imagePath = $request->file('image')->store('gas-cylinders', 'public');
            $data['image'] = $imagePath;
        }

        $cylinder->update($data);

        return redirect()->route('admin.gas')->with('success', 'تم تحديث قنينة الغاز بنجاح');
    }

    /**
     * حذف قنينة غاز
     */
    public function deleteGas($id)
    {
        $cylinder = GasCylinder::findOrFail($id);

        // حذف الصورة
        if ($cylinder->image) {
            Storage::disk('public')->delete($cylinder->image);
        }

        $cylinder->delete();

        return redirect()->route('admin.gas')->with('success', 'تم حذف قنينة الغاز بنجاح');
    }

    /**
     * إدارة المدفوعات
     */
    public function payments(Request $request)
    {
        $query = Payment::with(['user', 'trip']);

        // فلتر البحث بحالة الدفع
        if ($request->filled('status')) {
            $query->where('status', $request->status);
        }

        // فلتر البحث بطريقة الدفع
        if ($request->filled('payment_method')) {
            $query->where('payment_method', $request->payment_method);
        }

        // فلتر البحث بالمستخدم
        if ($request->filled('user')) {
            $query->whereHas('user', function($q) use ($request) {
                $q->where('name', 'like', '%' . $request->user . '%');
            });
        }

        // فلتر البحث بالتاريخ
        if ($request->filled('date')) {
            $query->whereDate('created_at', $request->date);
        }

        $payments = $query->latest()->paginate(10);

        return view('admin.payments.index', compact('payments'));
    }

    /**
     * إدارة المركبات
     */
    public function vehicles()
    {
        $vehicles = Vehicle::with(['driver'])
            ->latest()
            ->paginate(10);

        return view('admin.vehicles.index', compact('vehicles'));
    }

    /**
     * التقارير
     */
    public function reports()
    {
        // تقرير الرحلات الشهرية
        $monthly_trips = Trip::selectRaw('MONTH(created_at) as month, COUNT(*) as count')
            ->whereYear('created_at', now()->year)
            ->groupBy('month')
            ->get();

        // تقرير الإيرادات الشهرية
        $monthly_revenue = Payment::selectRaw('MONTH(created_at) as month, SUM(amount) as total')
            ->whereYear('created_at', now()->year)
            ->groupBy('month')
            ->get();

        // تقرير الطلبات
        $order_stats = [
            'food_orders' => FoodOrder::count(),
            'gas_orders' => GasOrder::count(),
            'pending_orders' => FoodOrder::where('status', 'pending')->count() +
                               GasOrder::where('status', 'pending')->count(),
        ];

        return view('admin.reports.index', compact('monthly_trips', 'monthly_revenue', 'order_stats'));
    }

    /**
     * الإعدادات
     */
    public function settings()
    {
        return view('admin.settings.index');
    }

    /**
     * تحديث الإعدادات
     */
    public function updateSettings(Request $request)
    {
        // تحديث إعدادات التطبيق
        $settings = $request->validate([
            'app_name' => 'required|string|max:255',
            'app_description' => 'nullable|string',
            'contact_email' => 'required|email',
            'contact_phone' => 'required|string',
            'tax_rate' => 'required|numeric|min:0|max:100',
            'delivery_fee' => 'required|numeric|min:0',
        ]);

        // حفظ الإعدادات في قاعدة البيانات أو ملف config
        foreach ($settings as $key => $value) {
            config([$key => $value]);
        }

        return redirect()->back()->with('success', 'تم تحديث الإعدادات بنجاح');
    }

    /**
     * عرض تفاصيل الرحلة
     */
    public function showTrip($id)
    {
        $trip = Trip::with(['driver', 'passenger', 'vehicle', 'payment'])
            ->findOrFail($id);

        return view('admin.trips.show', compact('trip'));
    }

    /**
     * تحديث حالة الرحلة
     */
    public function updateTripStatus(Request $request, $id)
    {
        $trip = Trip::findOrFail($id);

        $request->validate([
            'status' => 'required|in:pending,accepted,started,completed,cancelled'
        ]);

        $trip->update(['status' => $request->status]);

        return response()->json([
            'success' => true,
            'message' => 'تم تحديث حالة الرحلة بنجاح'
        ]);
    }

    /**
     * عرض تفاصيل الرحلة في Modal
     */
    public function getTripDetails($id)
    {
        $trip = Trip::with(['driver', 'passenger', 'vehicle', 'payment'])
            ->findOrFail($id);

        $html = view('admin.trips._details', compact('trip'))->render();

        return response()->json([
            'success' => true,
            'html' => $html
        ]);
    }

    /**
     * عرض سجل تغييرات الرحلة
     */
    public function getTripHistory($id)
    {
        $trip = Trip::findOrFail($id);

        // يمكن إضافة منطق لجلب سجل التغييرات من جدول منفصل
        $history = []; // سيتم إضافته لاحقاً

        $html = view('admin.trips._history', compact('trip', 'history'))->render();

        return response()->json([
            'success' => true,
            'html' => $html
        ]);
    }

    /**
     * عرض تفاصيل الدفع
     */
    public function showPayment($id)
    {
        $payment = Payment::with(['user', 'trip', 'paymentable'])
            ->findOrFail($id);

        return view('admin.payments.show', compact('payment'));
    }

    /**
     * تحديث حالة الدفع
     */
    public function updatePaymentStatus(Request $request, $id)
    {
        $payment = Payment::findOrFail($id);

        $request->validate([
            'status' => 'required|in:pending,processing,completed,cancelled,failed,refund_requested'
        ]);

        $payment->update(['status' => $request->status]);

        // إذا تم إكمال الدفع، تحديث وقت الإكمال
        if ($request->status == 'completed') {
            $payment->update(['completed_at' => now()]);
        }

        // إذا تم إلغاء الدفع، تحديث وقت الإلغاء
        if ($request->status == 'cancelled') {
            $payment->update(['cancelled_at' => now()]);
        }

        return response()->json([
            'success' => true,
            'message' => 'تم تحديث حالة الدفع بنجاح'
        ]);
    }

    /**
     * عرض تفاصيل الدفع في Modal
     */
    public function getPaymentDetails($id)
    {
        $payment = Payment::with(['user', 'trip', 'paymentable'])
            ->findOrFail($id);

        $html = view('admin.payments._details', compact('payment'))->render();

        return response()->json([
            'success' => true,
            'html' => $html
        ]);
    }

    /**
     * طلب استرداد الدفع
     */
    public function requestPaymentRefund($id)
    {
        $payment = Payment::findOrFail($id);

        // التحقق من أن الدفع مكتمل
        if ($payment->status !== 'completed') {
            return response()->json([
                'success' => false,
                'message' => 'يمكن طلب الاسترداد فقط للمدفوعات المكتملة'
            ], 400);
        }

        $payment->update([
            'status' => 'refund_requested',
            'refund_requested_at' => now()
        ]);

        return response()->json([
            'success' => true,
            'message' => 'تم طلب الاسترداد بنجاح'
        ]);
    }

    /**
     * عرض تفاصيل المركبة
     */
    public function showVehicle($id)
    {
        $vehicle = Vehicle::with(['driver', 'trips'])
            ->findOrFail($id);

        return view('admin.vehicles.show', compact('vehicle'));
    }

    /**
     * عرض صفحة إضافة مركبة جديدة
     */
    public function createVehicle()
    {
        // جلب قائمة السائقين المتاحين
        $drivers = Driver::where('is_active', true)
            ->where('is_verified', true)
            ->orderBy('name')
            ->get();

        // إحصائيات المركبات
        $stats = [
            'total' => Vehicle::count(),
            'active' => Vehicle::where('is_active', true)->count(),
            'available' => Vehicle::where('is_available', true)->count(),
            'assigned' => Vehicle::whereNotNull('driver_id')->count(),
        ];

        return view('admin.vehicles.create', compact('drivers', 'stats'));
    }

    /**
     * إنشاء مركبة جديدة
     */
    public function storeVehicle(Request $request)
    {
        $request->validate([
            'plate_number' => 'required|string|max:20|unique:vehicles',
            'brand' => 'required|string|max:100',
            'model' => 'required|string|max:100',
            'year' => 'required|integer|min:1900|max:' . (date('Y') + 1),
            'color' => 'required|string|max:50',
            'vehicle_type' => 'required|in:sedan,suv,hatchback,pickup,van',
            'driver_id' => 'nullable|exists:drivers,id',
            'notes' => 'nullable|string|max:500',
            'image' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048'
        ]);

        $vehicle = new Vehicle($request->except(['image', 'driver_id']));
        $vehicle->is_active = true;
        $vehicle->is_available = true;

        // تخصيص السائق إذا تم اختياره
        if ($request->filled('driver_id')) {
            $vehicle->driver_id = $request->driver_id;
        }

        $vehicle->save();

        // رفع الصورة إذا تم توفيرها
        if ($request->hasFile('image')) {
            $imagePath = $request->file('image')->store('vehicles', 'public');
            $vehicle->update(['image' => $imagePath]);
        }

        return redirect()->route('admin.vehicles')->with('success', 'تم إضافة المركبة بنجاح');
    }

    /**
     * تحديث حالة المركبة
     */
    public function updateVehicleStatus(Request $request, $id)
    {
        $vehicle = Vehicle::findOrFail($id);

        $request->validate([
            'status' => 'required|in:active,inactive'
        ]);

        $vehicle->update(['is_active' => ($request->status == 'active')]);

        return response()->json([
            'success' => true,
            'message' => 'تم تحديث حالة المركبة بنجاح'
        ]);
    }

    /**
     * تبديل توفر المركبة
     */
    public function toggleVehicleAvailability($id)
    {
        $vehicle = Vehicle::findOrFail($id);

        $vehicle->update(['is_available' => !$vehicle->is_available]);

        return response()->json([
            'success' => true,
            'message' => $vehicle->is_available ? 'تم توفير المركبة' : 'تم إلغاء توفر المركبة'
        ]);
    }

    /**
     * عرض تفاصيل المركبة في Modal
     */
    public function getVehicleDetails($id)
    {
        $vehicle = Vehicle::with(['driver', 'trips'])
            ->findOrFail($id);

        $html = view('admin.vehicles._details', compact('vehicle'))->render();

        return response()->json([
            'success' => true,
            'html' => $html
        ]);
    }
}

