<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class WorkerSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $workers = [
            [
                'name' => 'John Doe',
                'email' => 'john.doe@example.com',
                'phone' => '+971 50 111 2222',
                'nationality' => 'India',
                'country' => 'United Arab Emirates',
                'city' => 'Dubai',
                'area' => 'Dubai Marina',
                'preferred_location' => 'Dubai Marina',
                'live_in_out' => 'Live-in (Stay with family)',
                'language' => 'English',
                'age' => 30,
                'gender' => 'Male',
                'salary' => 2500.00,
                'availability' => 'Immediate',
                'experience' => '5+ Years',
                'religion' => 'Christian',
                'bio' => '',
                'category_id' => 1, // Electrician
                'verified' => true,
                'status' => 'active',
            ],
            [
                'name' => 'Ali Hassan',
                'email' => 'ali.hassan@example.com',
                'phone' => '+971 50 333 4444',
                'nationality' => 'Pakistan',
                'country' => 'United Arab Emirates',
                'city' => 'Dubai',
                'area' => 'Al Barsha',
                'preferred_location' => 'Al Barsha',
                'live_in_out' => 'Live-out (External housing)',
                'language' => 'English',
                'age' => 28,
                'gender' => 'Male',
                'salary' => 2000.00,
                'availability' => '1 Month Notice',
                'experience' => '3 Years',
                'religion' => 'Muslim',
                'bio' => 'Skilled mason with experience in block work and plastering.',
                'category_id' => 2, // Mason
                'verified' => true,
                'status' => 'active',
            ],
            [
                'name' => 'Maria Santos',
                'email' => 'maria.santos@example.com',
                'phone' => '+971 50 555 6666',
                'nationality' => 'Philippines',
                'country' => 'United Arab Emirates',
                'city' => 'Abu Dhabi',
                'area' => 'Yas Island',
                'preferred_location' => 'Yas Island',
                'live_in_out' => 'Live-in (Stay with family)',
                'language' => 'Tagalog',
                'age' => 32,
                'gender' => 'Female',
                'salary' => 1800.00,
                'availability' => 'Immediate',
                'experience' => '5+ Years',
                'religion' => 'Christian',
                'bio' => 'Experienced nanny with 6 years working with expatriate families in Dubai. Certified in pediatric first aid.',
                'category_id' => 8, // Childcare
                'verified' => true,
                'status' => 'active',
            ],
            [
                'name' => 'Lakshmi Sharma',
                'email' => 'lakshmi.sharma@example.com',
                'phone' => '+971 50 777 8888',
                'nationality' => 'India',
                'country' => 'United Arab Emirates',
                'city' => 'Abu Dhabi',
                'area' => 'Khalifa City',
                'preferred_location' => 'Khalifa City',
                'live_in_out' => 'Live-out (External housing)',
                'language' => 'Hindi',
                'age' => 38,
                'gender' => 'Female',
                'salary' => 1600.00,
                'availability' => '2 Weeks',
                'experience' => '3-5 Years',
                'religion' => 'Hindu',
                'bio' => 'Patient caregiver specializing in elderly assistance, mobility support, and vegetarian cooking.',
                'category_id' => 11, // Elderly Care
                'verified' => true,
                'status' => 'active',
            ],
            [
                'name' => 'Siti Aminah',
                'email' => 'siti.aminah@example.com',
                'phone' => '+971 50 999 0000',
                'nationality' => 'Indonesia',
                'country' => 'United Arab Emirates',
                'city' => 'Sharjah',
                'area' => 'Al Nahda',
                'preferred_location' => 'Al Nahda',
                'live_in_out' => 'Live-in (Stay with family)',
                'language' => 'Arabic',
                'age' => 29,
                'gender' => 'Female',
                'salary' => 1400.00,
                'availability' => 'Immediate',
                'experience' => '3-5 Years',
                'religion' => 'Muslim',
                'bio' => 'Hardworking and meticulous housekeeper with excellent references from Abu Dhabi households.',
                'category_id' => 9, // Housekeeping
                'verified' => true,
                'status' => 'active',
            ],
            [
                'name' => 'Grace Osei',
                'email' => 'grace.osei@example.com',
                'phone' => '+971 50 222 3333',
                'nationality' => 'Ghana',
                'country' => 'Saudi Arabia',
                'city' => 'Riyadh',
                'area' => 'Al Olaya',
                'preferred_location' => 'Al Olaya',
                'live_in_out' => 'Live-out (External housing)',
                'language' => 'English',
                'age' => 26,
                'gender' => 'Female',
                'salary' => 1500.00,
                'availability' => '1 Month',
                'experience' => '1-2 Years',
                'religion' => 'Christian',
                'bio' => 'Energetic and educated nanny. Fluent in English, great with toddlers and assisting with homework.',
                'category_id' => 8, // Childcare
                'verified' => false,
                'status' => 'active',
            ],
            [
                'name' => 'Anoma Perera',
                'email' => 'anoma.perera@example.com',
                'phone' => '+971 50 444 5555',
                'nationality' => 'Sri Lanka',
                'country' => 'Saudi Arabia',
                'city' => 'Jeddah',
                'area' => 'Al Hamra',
                'preferred_location' => 'Al Hamra',
                'live_in_out' => 'Live-in (Stay with family)',
                'language' => 'English',
                'age' => 41,
                'gender' => 'Female',
                'salary' => 2200.00,
                'availability' => 'Immediate',
                'experience' => '5+ Years',
                'religion' => 'Buddhist',
                'bio' => 'Professional domestic cook skilled in Arabic, Continental, and Asian cuisine. Highly organized.',
                'category_id' => 10, // Cooking
                'verified' => true,
                'status' => 'active',
            ],
            [
                'name' => 'Ramesh Thapa',
                'email' => 'ramesh.thapa@example.com',
                'phone' => '+971 50 666 7777',
                'nationality' => 'Nepal',
                'country' => 'Saudi Arabia',
                'city' => 'Riyadh',
                'area' => 'Al Yasmin',
                'preferred_location' => 'Al Yasmin',
                'live_in_out' => 'Live-out (External housing)',
                'language' => 'English',
                'age' => 36,
                'gender' => 'Male',
                'salary' => 2500.00,
                'availability' => '2 Weeks',
                'experience' => '5+ Years',
                'religion' => 'Hindu',
                'bio' => 'Valid UAE driving license with clean record. Familiar with all Dubai and Sharjah school routes.',
                'category_id' => 6, // Driver
                'verified' => true,
                'status' => 'active',
            ],
        ];

        // Dynamic Category Resolution
        $categoryMapping = [
            1 => 'Electrician',
            2 => 'Mason',
            3 => 'Plumber',
            4 => 'Cleaner',
            5 => 'Site Supervisor',
            6 => 'Driver',
            7 => 'General Helper',
            8 => 'Childcare',
            9 => 'Housekeeping',
            10 => 'Cooking',
            11 => 'Elderly Care',
        ];

        $categoryIds = [];
        foreach ($categoryMapping as $oldId => $name) {
            $cat = \Illuminate\Support\Facades\DB::table('worker_categories')->where('name', $name)->first();
            if (!$cat) {
                $catId = \Illuminate\Support\Facades\DB::table('worker_categories')->insertGetId([
                    'name' => $name,
                    'created_at' => now(),
                    'updated_at' => now(),
                ]);
            } else {
                $catId = $cat->id;
            }
            $categoryIds[$oldId] = $catId;
        }

        // Dynamic Skill Resolution
        $skillIds = \Illuminate\Support\Facades\DB::table('skills')->pluck('id')->toArray();
        if (empty($skillIds)) {
            foreach (['cooking', 'driving', 'childcare', 'cleaning', 'elderly care', 'gardening'] as $skillName) {
                $skillIds[] = \Illuminate\Support\Facades\DB::table('skills')->insertGetId([
                    'name' => $skillName,
                    'created_at' => now(),
                    'updated_at' => now(),
                ]);
            }
        }

        $sId1 = $skillIds[0] ?? 1;
        $sId2 = $skillIds[1] ?? 2;

        foreach ($workers as $workerData) {
            $resolvedCategoryId = $categoryIds[$workerData['category_id']] ?? $workerData['category_id'];
            
            // Exclude email duplicates to avoid unique constraint violations
            if (\Illuminate\Support\Facades\DB::table('workers')->where('email', $workerData['email'])->exists()) {
                continue;
            }

            $workerId = \Illuminate\Support\Facades\DB::table('workers')->insertGetId(array_merge($workerData, [
                'category_id' => $resolvedCategoryId,
                'created_at' => now(),
                'updated_at' => now(),
            ]));

            // Seed Documents
            \Illuminate\Support\Facades\DB::table('worker_documents')->insert([
                [
                    'worker_id' => $workerId,
                    'type' => 'passport',
                    'number' => 'P' . rand(100000, 999999),
                    'issue_date' => '2020-01-01',
                    'expiry_date' => '2030-01-01',
                    'ocr_accuracy' => 95.5,
                    'created_at' => now(),
                    'updated_at' => now(),
                ],
                [
                    'worker_id' => $workerId,
                    'type' => 'visa',
                    'number' => 'V' . rand(100000, 999999),
                    'issue_date' => '2022-01-01',
                    'expiry_date' => '2025-01-01',
                    'ocr_accuracy' => 98.0,
                    'created_at' => now(),
                    'updated_at' => now(),
                ]
            ]);

            // Seed Skills using resolved IDs
            \Illuminate\Support\Facades\DB::table('worker_skills')->insert([
                [
                    'worker_id' => $workerId,
                    'skill_id' => $sId1,
                    'created_at' => now(),
                    'updated_at' => now(),
                ],
                [
                    'worker_id' => $workerId,
                    'skill_id' => $sId2,
                    'created_at' => now(),
                    'updated_at' => now(),
                ]
            ]);
        }
    }
}
