<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\GasCylinder;
use App\Models\GasOrder;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Auth;

class GasController extends Controller
{
    /**
     * عرض قائمة قناني الغاز المتاحة
     */
    public function index(Request $request): JsonResponse
    {
        $query = GasCylinder::available();

        // فلترة حسب الحجم
        if ($request->has('size')) {
            $query->bySize($request->size);
        }

        // فلترة حسب النوع
        if ($request->has('type')) {
            $query->byType($request->type);
        }

        // فلترة حسب السعر
        if ($request->has('min_price')) {
            $query->where('price', '>=', $request->min_price);
        }

        if ($request->has('max_price')) {
            $query->where('price', '<=', $request->max_price);
        }

        $cylinders = $query->orderBy('price')->paginate(20);

        return response()->json([
            'success' => true,
            'data' => $cylinders,
            'message' => 'تم جلب قناني الغاز بنجاح'
        ]);
    }

    /**
     * عرض قنينة غاز معينة
     */
    public function show(GasCylinder $gasCylinder): JsonResponse
    {
        return response()->json([
            'success' => true,
            'data' => $gasCylinder,
            'message' => 'تم جلب بيانات قنينة الغاز بنجاح'
        ]);
    }

    /**
     * طلب قناني غاز
     */
    public function order(Request $request): JsonResponse
    {
        $request->validate([
            'items' => 'required|array|min:1',
            'items.*.gas_cylinder_id' => 'required|exists:gas_cylinders,id',
            'items.*.quantity' => 'required|integer|min:1',
            'delivery_address' => 'required|string',
            'delivery_latitude' => 'nullable|numeric',
            'delivery_longitude' => 'nullable|numeric',
            'preferred_delivery_time' => 'nullable|date',
            'special_instructions' => 'nullable|string',
            'payment_method' => 'required|in:cash,card,online',
            'gas_office_id' => 'required|exists:gas_offices,id',
        ]);

        $user = Auth::user();
        $items = $request->items;
        $subtotal = 0;
        $deliveryFee = 25.00; // رسوم التوصيل الثابتة
        $tax = 0.15; // ضريبة 15%

        // حساب المجموع الفرعي
        foreach ($items as $item) {
            $cylinder = GasCylinder::find($item['gas_cylinder_id']);
            $subtotal += $cylinder->price * $item['quantity'];
        }

        $taxAmount = $subtotal * $tax;
        $total = $subtotal + $deliveryFee + $taxAmount;

        // إنشاء الطلب
        $order = GasOrder::create([
            'customer_id' => $user->id,
            'gas_office_id' => $request->gas_office_id,
            'order_number' => 'GAS-' . 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,
            'preferred_delivery_time' => $request->preferred_delivery_time,
            'special_instructions' => $request->special_instructions,
            'payment_method' => $request->payment_method,
            'is_urgent' => $request->get('is_urgent', false),
        ]);

        // إنشاء تفاصيل الطلب
        foreach ($items as $item) {
            $cylinder = GasCylinder::find($item['gas_cylinder_id']);
            $order->orderItems()->create([
                'gas_cylinder_id' => $cylinder->id,
                'quantity' => $item['quantity'],
                'unit_price' => $cylinder->price,
                'total_price' => $cylinder->price * $item['quantity'],
                'special_instructions' => $item['special_instructions'] ?? null,
            ]);

            // تحديث المخزون
            $cylinder->decrement('stock_quantity', $item['quantity']);
        }

        $order->load('orderItems.gasCylinder');

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

    /**
     * عرض طلبات المستخدم
     */
    public function myOrders(): JsonResponse
    {
        $user = Auth::user();
        $orders = $user->gasOrders()
            ->with('orderItems.gasCylinder')
            ->orderBy('created_at', 'desc')
            ->paginate(20);

        return response()->json([
            'success' => true,
            'data' => $orders,
            'message' => 'تم جلب طلباتك بنجاح'
        ]);
    }

    /**
     * عرض طلب معين
     */
    public function showOrder(GasOrder $gasOrder): JsonResponse
    {
        // التأكد من أن المستخدم يملك الطلب
        if ($gasOrder->customer_id !== Auth::id()) {
            return response()->json([
                'success' => false,
                'message' => 'غير مصرح لك بعرض هذا الطلب'
            ], 403);
        }

        $gasOrder->load('orderItems.gasCylinder');

        return response()->json([
            'success' => true,
            'data' => $gasOrder,
            'message' => 'تم جلب بيانات الطلب بنجاح'
        ]);
    }

    /**
     * إلغاء طلب
     */
    public function cancelOrder(GasOrder $gasOrder): JsonResponse
    {
        // التأكد من أن المستخدم يملك الطلب
        if ($gasOrder->customer_id !== Auth::id()) {
            return response()->json([
                'success' => false,
                'message' => 'غير مصرح لك بإلغاء هذا الطلب'
            ], 403);
        }

        // التأكد من أن الطلب يمكن إلغاؤه
        if (!in_array($gasOrder->status, ['pending', 'confirmed'])) {
            return response()->json([
                'success' => false,
                'message' => 'لا يمكن إلغاء الطلب في هذه المرحلة'
            ], 400);
        }

        $gasOrder->update(['status' => 'cancelled']);

        // إعادة المخزون
        foreach ($gasOrder->orderItems as $item) {
            $item->gasCylinder->increment('stock_quantity', $item->quantity);
        }

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

    /**
     * تقييم الطلب
     */
    public function rateOrder(Request $request, GasOrder $gasOrder): JsonResponse
    {
        $request->validate([
            'rating' => 'required|numeric|min:1|max:5',
            'feedback' => 'nullable|string|max:500',
        ]);

        // التأكد من أن المستخدم يملك الطلب
        if ($gasOrder->customer_id !== Auth::id()) {
            return response()->json([
                'success' => false,
                'message' => 'غير مصرح لك بتقييم هذا الطلب'
            ], 403);
        }

        // التأكد من أن الطلب مكتمل
        if ($gasOrder->status !== 'delivered') {
            return response()->json([
                'success' => false,
                'message' => 'يمكن تقييم الطلب بعد اكتماله فقط'
            ], 400);
        }

        $gasOrder->update([
            'customer_rating' => $request->rating,
            'customer_feedback' => $request->feedback,
        ]);

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