<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Restaurant;
use App\Models\FoodOrder;
use Illuminate\Http\Request;

class RestaurantOrderController extends Controller
{
    /**
     * عرض جميع طلبات المطعم
     */
    public function index(Request $request, $restaurantId)
    {
        $restaurant = Restaurant::with('user')->findOrFail($restaurantId);
        
        $query = FoodOrder::where('restaurant_id', $restaurantId)
            ->with(['customer', 'orderItems.menuItem', 'driver'])
            ->orderBy('created_at', 'desc');

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

        // فلترة حسب التاريخ
        if ($request->filled('date_from')) {
            $query->whereDate('created_at', '>=', $request->date_from);
        }
        if ($request->filled('date_to')) {
            $query->whereDate('created_at', '<=', $request->date_to);
        }

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

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

        $orders = $query->paginate(20);

        // إحصائيات الطلبات
        $stats = [
            'total' => FoodOrder::where('restaurant_id', $restaurantId)->count(),
            'pending' => FoodOrder::where('restaurant_id', $restaurantId)->where('status', 'pending')->count(),
            'confirmed' => FoodOrder::where('restaurant_id', $restaurantId)->where('status', 'confirmed')->count(),
            'preparing' => FoodOrder::where('restaurant_id', $restaurantId)->where('status', 'preparing')->count(),
            'ready' => FoodOrder::where('restaurant_id', $restaurantId)->where('status', 'ready')->count(),
            'delivered' => FoodOrder::where('restaurant_id', $restaurantId)->where('status', 'delivered')->count(),
            'cancelled' => FoodOrder::where('restaurant_id', $restaurantId)->where('status', 'cancelled')->count(),
        ];

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

    /**
     * عرض تفاصيل طلب معين
     */
    public function show($restaurantId, $orderId)
    {
        $restaurant = Restaurant::with('user')->findOrFail($restaurantId);
        $order = FoodOrder::where('restaurant_id', $restaurantId)
            ->with(['customer', 'orderItems.menuItem', 'driver', 'restaurant'])
            ->findOrFail($orderId);

        return view('admin.restaurants.order-details', compact('restaurant', 'order'));
    }

    /**
     * تحديث حالة الطلب
     */
    public function updateStatus(Request $request, $restaurantId, $orderId)
    {
        $request->validate([
            'status' => 'required|in:pending,confirmed,preparing,ready,picked_up,delivered,cancelled'
        ]);

        $order = FoodOrder::where('restaurant_id', $restaurantId)->findOrFail($orderId);
        $order->update(['status' => $request->status]);

        // حساب أجر التطبيق عند التوصيل
        if ($request->status === 'delivered' && !$order->platform_fee_calculated) {
            try {
                \App\Services\PlatformFeeService::calculateAndSaveForFoodOrder($order->fresh());
            } catch (\Exception $e) {
                \Log::error('خطأ في حساب أجر التطبيق: ' . $e->getMessage());
            }
        }

        // حساب أرباح الإحالات عند التوصيل
        if ($request->status === 'delivered') {
            try {
                $customer = $order->customer;
                if ($customer) {
                    // البحث عن الإحالة المرتبطة بهذا المستخدم
                    $referral = \App\Models\Referral::where('referred_id', $customer->id)
                        ->where('status', 'completed')
                        ->first();

                    if ($referral) {
                        // التحقق من عدم وجود سجل ربح سابق لهذا الطلب
                        $existingEarning = \App\Models\ReferralEarning::where('order_type', 'food')
                            ->where('order_id', $order->id)
                            ->first();

                        if (!$existingEarning) {
                            // إنشاء سجل ربح جديد
                            \App\Models\ReferralEarning::createFromOrder(
                                $referral,
                                'food',
                                $order->id,
                                $order->order_number,
                                $order->total
                            );
                        }
                    }
                }
            } catch (\Exception $e) {
                \Log::error('خطأ في حساب أرباح الإحالات: ' . $e->getMessage());
            }
        }

        return redirect()
            ->route('admin.restaurants.orders.show', [$restaurantId, $orderId])
            ->with('success', 'تم تحديث حالة الطلب بنجاح');
    }
}

