<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\WorkingArea;
use App\Models\ServicePoint;
use Illuminate\Support\Facades\DB;

class CleanupSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $this->command->info('🧹 بدء تنظيف قاعدة البيانات...');

        // تنظيف المناطق المكررة
        $this->cleanupDuplicateWorkingAreas();
        
        // تنظيف نقاط الخدمة المكررة
        $this->cleanupDuplicateServicePoints();

        $this->command->info('✅ تم تنظيف قاعدة البيانات بنجاح!');
    }

    /**
     * تنظيف المناطق المكررة
     */
    private function cleanupDuplicateWorkingAreas()
    {
        $this->command->info('🗺️ تنظيف المناطق المكررة...');

        // العثور على المناطق المكررة
        $duplicates = DB::table('working_areas')
            ->select('city_name_ar', DB::raw('COUNT(*) as count'))
            ->groupBy('city_name_ar')
            ->having('count', '>', 1)
            ->get();

        foreach ($duplicates as $duplicate) {
            $this->command->info("⚠️ منطقة مكررة: {$duplicate->city_name_ar} ({$duplicate->count} مرة)");
            
            // الاحتفاظ بالأولى وحذف الباقي
            $areas = WorkingArea::where('city_name_ar', $duplicate->city_name_ar)
                ->orderBy('id')
                ->get();
            
            // حذف جميع النسخ ما عدا الأولى
            for ($i = 1; $i < $areas->count(); $i++) {
                $this->command->info("🗑️ حذف منطقة مكررة: {$areas[$i]->city_name_ar} (ID: {$areas[$i]->id})");
                $areas[$i]->delete();
            }
        }
    }

    /**
     * تنظيف نقاط الخدمة المكررة
     */
    private function cleanupDuplicateServicePoints()
    {
        $this->command->info('🏪 تنظيف نقاط الخدمة المكررة...');

        // العثور على نقاط الخدمة المكررة
        $duplicates = DB::table('service_points')
            ->select('name_ar', DB::raw('COUNT(*) as count'))
            ->groupBy('name_ar')
            ->having('count', '>', 1)
            ->get();

        foreach ($duplicates as $duplicate) {
            $this->command->info("⚠️ نقطة خدمة مكررة: {$duplicate->name_ar} ({$duplicate->count} مرة)");
            
            // الاحتفاظ بالأولى وحذف الباقي
            $points = ServicePoint::where('name_ar', $duplicate->name_ar)
                ->orderBy('id')
                ->get();
            
            // حذف جميع النسخ ما عدا الأولى
            for ($i = 1; $i < $points->count(); $i++) {
                $this->command->info("🗑️ حذف نقطة خدمة مكررة: {$points[$i]->name_ar} (ID: {$points[$i]->id})");
                $points[$i]->delete();
            }
        }
    }
}
