<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\GasOffice;
use App\Models\GasCylinder;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;

class GasOfficeController extends Controller
{
    /**
     * عرض جميع مكاتب الغاز
     */
    public function index(Request $request): JsonResponse
    {
        try {
            $query = GasOffice::with(['owner'])
                ->where('is_active', true);

            // فلترة حسب الموقع الجغرافي (الأولوية)
            if ($request->has('latitude') && $request->has('longitude')) {
                $userLat = (float) $request->latitude;
                $userLng = (float) $request->longitude;
                
                // البحث عن المكاتب التي لها نفس خط العرض والطول (مع هامش صغير)
                // نستخدم هامش 0.1 درجة (حوالي 11 كيلومتر)
                $latMargin = 0.1;
                $lngMargin = 0.1;
                
                $query->whereNotNull('latitude')
                      ->whereNotNull('longitude')
                      ->whereBetween('latitude', [$userLat - $latMargin, $userLat + $latMargin])
                      ->whereBetween('longitude', [$userLng - $lngMargin, $userLng + $lngMargin]);
                
                \Log::info("جلب مكاتب الغاز للموقع: $userLat, $userLng");
            }
            // فلترة حسب المحافظة (fallback)
            elseif ($request->has('province') && $request->province) {
                $province = trim($request->province);
                // البحث في العنوان بعدة طرق لضمان الدقة
                $query->where(function($q) use ($province) {
                    $q->where('address', 'LIKE', '%' . $province . '%')
                      ->orWhere('address', 'LIKE', '%' . mb_strtolower($province) . '%')
                      ->orWhere('address', 'LIKE', '%' . mb_strtoupper($province) . '%');
                });
                \Log::info("جلب مكاتب الغاز للمحافظة: $province");
            }

            // فلترة حسب الحالة (مفتوح/مغلق)
            if ($request->has('is_open') && $request->is_open !== null) {
                $query->where('is_open', $request->is_open);
            }

            $offices = $query->orderBy('rating', 'desc')
                ->orderBy('created_at', 'desc')
                ->get();

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

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

    /**
     * عرض تفاصيل مكتب غاز معين
     */
    public function show(int $id): JsonResponse
    {
        try {
            $office = GasOffice::with(['owner', 'cylinders'])
                ->where('is_active', true)
                ->find($id);

            if (!$office) {
                return response()->json([
                    'success' => false,
                    'data' => null,
                    'message' => 'مكتب الغاز غير موجود'
                ], 404);
            }

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

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

    /**
     * عرض قناني الغاز لمكتب معين
     */
    public function cylinders(int $id): JsonResponse
    {
        try {
            $office = GasOffice::find($id);
            
            if (!$office) {
                return response()->json([
                    'success' => false,
                    'data' => [],
                    'message' => 'مكتب الغاز غير موجود'
                ], 404);
            }

            $cylinders = GasCylinder::where('gas_office_id', $id)
                ->where('is_available', true)
                ->orderBy('type')
                ->orderBy('size')
                ->get();

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

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

    /**
     * البحث في مكاتب الغاز
     */
    public function search(Request $request): JsonResponse
    {
        try {
            $query = GasOffice::with(['owner'])
                ->where('is_active', true);

            // البحث بالاسم
            if ($request->has('name') && $request->name) {
                $query->where('name', 'LIKE', '%' . $request->name . '%');
            }

            // البحث بالعنوان
            if ($request->has('address') && $request->address) {
                $query->where('address', 'LIKE', '%' . $request->address . '%');
            }

            // البحث بالهاتف
            if ($request->has('phone') && $request->phone) {
                $query->where('phone', 'LIKE', '%' . $request->phone . '%');
            }

            // فلترة حسب التقييم
            if ($request->has('min_rating') && $request->min_rating) {
                $query->where('rating', '>=', $request->min_rating);
            }

            // فلترة حسب رسوم التوصيل
            if ($request->has('max_delivery_fee') && $request->max_delivery_fee) {
                $query->where('delivery_fee', '<=', $request->max_delivery_fee);
            }

            $offices = $query->orderBy('rating', 'desc')
                ->orderBy('created_at', 'desc')
                ->get();

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

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

    /**
     * تحديث حالة مكتب الغاز (مفتوح/مغلق)
     */
    public function updateStatus(Request $request, int $id): JsonResponse
    {
        try {
            $office = GasOffice::find($id);
            
            if (!$office) {
                return response()->json([
                    'success' => false,
                    'data' => null,
                    'message' => 'مكتب الغاز غير موجود'
                ], 404);
            }

            $request->validate([
                'is_open' => 'required|boolean',
                'opening_time' => 'nullable|date_format:H:i',
                'closing_time' => 'nullable|date_format:H:i',
            ]);

            $office->update([
                'is_open' => $request->is_open,
                'opening_time' => $request->opening_time,
                'closing_time' => $request->closing_time,
            ]);

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

        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'data' => null,
                'message' => 'خطأ في تحديث حالة مكتب الغاز: ' . $e->getMessage()
            ], 500);
        }
    }

    /**
     * إحصائيات مكتب الغاز
     */
    public function stats(int $id): JsonResponse
    {
        try {
            $office = GasOffice::find($id);
            
            if (!$office) {
                return response()->json([
                    'success' => false,
                    'data' => null,
                    'message' => 'مكتب الغاز غير موجود'
                ], 404);
            }

            $stats = [
                'total_orders' => $office->orders()->count(),
                'pending_orders' => $office->orders()->where('status', 'pending')->count(),
                'completed_orders' => $office->orders()->where('status', 'delivered')->count(),
                'total_revenue' => $office->orders()->where('status', 'delivered')->sum('total'),
                'average_rating' => $office->rating,
                'rating_count' => $office->rating_count,
                'total_cylinders' => $office->cylinders()->count(),
                'available_cylinders' => $office->cylinders()->where('is_available', true)->count(),
            ];

            return response()->json([
                'success' => true,
                'data' => $stats,
                'message' => 'تم جلب إحصائيات مكتب الغاز بنجاح'
            ]);

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

    /**
     * إنشاء بيانات تجريبية لمكاتب الغاز
     */
    public function createTestData(): JsonResponse
    {
        try {
            // إنشاء مستخدم مكتب غاز
            $user = \App\Models\User::create([
                'name' => 'أحمد محمد علي',
                'email' => 'ahmed@gasoffice.com',
                'password' => \Illuminate\Support\Facades\Hash::make('password123'),
                'phone' => '07901234567',
                'user_type' => 'gas_office_owner',
                'status' => 'active',
                'is_verified' => true,
                'email_verified_at' => now(),
            ]);

            // إنشاء مكتب الغاز
            $gasOffice = GasOffice::create([
                'name' => 'مكتب غاز الكرادة',
                'description' => 'مكتب غاز متخصص في توريد قناني الغاز الحديد والبلاستيك',
                'address' => 'بغداد - الكرادة - شارع الكرادة الداخلية',
                'phone' => '07901234567',
                'email' => 'ahmed@gasoffice.com',
                'owner_id' => $user->id,
                'is_active' => true,
                'is_open' => true,
                'opening_time' => '08:00:00',
                'closing_time' => '22:00:00',
                'delivery_fee' => 5000.00,
                'delivery_time_minutes' => 30,
                'minimum_order' => 20000.00,
                'rating' => 4.5,
                'rating_count' => 150,
            ]);

            // إنشاء قناني الغاز
            $cylinders = [
                [
                    'name' => 'قنينة حديد 12 كيلو',
                    'description' => 'قنينة غاز حديدية بسعة 12 كيلو - عالية الجودة',
                    'price' => 22500.00,
                    'size' => '12',
                    'type' => 'حديد',
                    'brand' => 'أمان',
                    'is_available' => true,
                    'stock_quantity' => 25,
                    'weight_kg' => 12.0,
                    'safety_instructions' => 'يجب تخزينها في مكان جاف وبارد',
                    'gas_office_id' => $gasOffice->id,
                ],
                [
                    'name' => 'قنينة بلاستيك 12 كيلو',
                    'description' => 'قنينة غاز بلاستيكية بسعة 12 كيلو - خفيفة الوزن',
                    'price' => 20000.00,
                    'size' => '12',
                    'type' => 'بلاستيك',
                    'brand' => 'أمان',
                    'is_available' => true,
                    'stock_quantity' => 18,
                    'weight_kg' => 12.0,
                    'safety_instructions' => 'تجنب التعرض لأشعة الشمس المباشرة',
                    'gas_office_id' => $gasOffice->id,
                ],
            ];

            foreach ($cylinders as $cylinder) {
                GasCylinder::create($cylinder);
            }

            return response()->json([
                'success' => true,
                'message' => 'تم إنشاء البيانات التجريبية بنجاح',
                'data' => [
                    'user_id' => $user->id,
                    'gas_office_id' => $gasOffice->id,
                    'cylinders_count' => count($cylinders)
                ]
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'success' => false,
                'message' => 'خطأ في إنشاء البيانات التجريبية: ' . $e->getMessage()
            ], 500);
        }
    }
}