<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Restaurant;

class UpdateRestaurantGovernoratesSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $governorates = [
            'بغداد', 'البصرة', 'النجف', 'كربلاء', 'الأنبار', 'نينوى', 
            'أربيل', 'السليمانية', 'دهوك', 'كركوك', 'صلاح الدين', 
            'ديالى', 'بابل', 'واسط', 'ذي قار', 'ميسان', 'المثنى', 'القادسية'
        ];

        // تحديث المطاعم الموجودة بمحافظات عشوائية للاختبار
        Restaurant::whereNull('governorate')->chunk(100, function ($restaurants) use ($governorates) {
            foreach ($restaurants as $restaurant) {
                // محاولة استخراج المحافظة من العنوان
                $governorate = $this->extractGovernorateFromAddress($restaurant->address, $governorates);
                
                // إذا لم نجد المحافظة، نضع محافظة عشوائية
                if (!$governorate) {
                    $governorate = $governorates[array_rand($governorates)];
                }

                $restaurant->update([
                    'governorate' => $governorate,
                    'city' => $this->extractCityFromAddress($restaurant->address) ?: 'المركز'
                ]);
            }
        });

        // إنشاء مطاعم جديدة للاختبار إذا لم توجد
        if (Restaurant::count() < 10) {
            $this->createSampleRestaurants($governorates);
        }
    }

    private function extractGovernorateFromAddress($address, $governorates)
    {
        if (!$address) {
            return null;
        }

        foreach ($governorates as $governorate) {
            if (str_contains($address, $governorate)) {
                return $governorate;
            }
        }

        return null;
    }

    private function extractCityFromAddress($address)
    {
        if (!$address) {
            return null;
        }

        $addressParts = explode(',', $address);
        if (count($addressParts) > 1) {
            return trim($addressParts[0]);
        }

        // محاولة استخراج المدينة من أول كلمتين
        $words = explode(' ', trim($address));
        if (count($words) >= 2) {
            return $words[0] . ' ' . $words[1];
        }

        return trim($words[0] ?? 'المركز');
    }

    private function createSampleRestaurants($governorates)
    {
        $sampleRestaurants = [
            [
                'name' => 'مطعم الأصالة العراقية',
                'description' => 'مطعم متخصص في الأكلات العراقية الأصيلة',
                'cuisine_type' => 'عراقي',
                'governorate' => 'بغداد',
                'city' => 'الكرادة',
                'address' => 'شارع الكرادة الشرقية، بغداد',
            ],
            [
                'name' => 'مطعم شهرزاد',
                'description' => 'مطعم عائلي يقدم أشهى الأطباق العربية',
                'cuisine_type' => 'عربي',
                'governorate' => 'البصرة',
                'city' => 'المعقل',
                'address' => 'منطقة المعقل، البصرة',
            ],
            [
                'name' => 'مطعم الفردوس التركي',
                'description' => 'أطباق تركية أصيلة بنكهات رائعة',
                'cuisine_type' => 'تركي',
                'governorate' => 'أربيل',
                'city' => 'المركز',
                'address' => 'وسط مدينة أربيل',
            ],
            [
                'name' => 'مطعم بيت الكباب',
                'description' => 'متخصصون في الكباب والمشاوي',
                'cuisine_type' => 'عراقي',
                'governorate' => 'النجف',
                'city' => 'المركز',
                'address' => 'قرب الحرم الشريف، النجف',
            ],
            [
                'name' => 'مطعم الذواقة',
                'description' => 'تشكيلة متنوعة من الأطباق العالمية',
                'cuisine_type' => 'متنوع',
                'governorate' => 'كربلاء',
                'city' => 'المركز',
                'address' => 'شارع الإمام الحسين، كربلاء',
            ]
        ];

        foreach ($sampleRestaurants as $restaurantData) {
            Restaurant::create(array_merge($restaurantData, [
                'user_id' => 1, // يجب أن يكون هناك مستخدم بـ ID = 1
                'phone' => '07' . rand(700000000, 799999999),
                'email' => strtolower(str_replace(' ', '', $restaurantData['name'])) . '@restaurant.com',
                'rating' => rand(35, 50) / 10, // تقييم من 3.5 إلى 5.0
                'rating_count' => rand(10, 500),
                'is_active' => true,
                'is_open' => true,
                'opening_time' => '08:00',
                'closing_time' => '23:00',
                'delivery_fee' => rand(5000, 15000),
                'delivery_time_minutes' => rand(20, 60),
                'minimum_order' => rand(15000, 30000),
                'latitude' => 33.3152 + (rand(-100, 100) / 1000), // حول بغداد
                'longitude' => 44.3661 + (rand(-100, 100) / 1000),
            ]));
        }
    }
}