/home2/mshostin/crm.ms-hostingladz.com/database/seeders/UserSeeder.php
<?php

namespace Database\Seeders;

use App\Models\User;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Illuminate\Support\Facades\Hash;
use App\Models\Department;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        try {
            // Reset cached roles and permissions
            app()->make(\Spatie\Permission\PermissionRegistrar::class)->forgetCachedPermissions();

            // Generate permissions from routes
            $this->call(RoutePermissionsSeeder::class);

            // Create Roles
            $adminRole = Role::firstOrCreate(['name' => 'Admin']);
            $subUserRole = Role::firstOrCreate(['name' => 'Subuser']);

            // Grant all permissions to Admin
            $adminRole->syncPermissions(Permission::all());

            // Create Admin User
            $adminEmail = 'admin@crm.com.pk';

            $admin = User::where('email', $adminEmail)->first();
            if (!$admin) {
                $admin = User::create([
                    'name' => 'Admin User',
                    'email' => $adminEmail,
                    'password' => Hash::make('12345678'),
                    'role' => 1,
                    'status' => 1,
                ]);
                $this->command->info("Admin user created: $adminEmail");
            } else {
                $this->command->info("Admin user already exists: $adminEmail");
            }
            $admin->assignRole($adminRole);

            // Create Subusers
            $numberOfSubusers = 3;
            for ($i = 1; $i <= $numberOfSubusers; $i++) {
                $email = "user{$i}@crm.com.pk";
                $subuser = User::where('email', $email)->first();

                if (!$subuser) {
                    $subuser = User::create([
                        'name' => "Sub User {$i}",
                        'email' => $email,
                        'password' => Hash::make('12345678'),
                        'role' => 2,
                        'status' => 1,
                    ]);
                    $this->command->info("Subuser created: $email");
                } else {
                    $this->command->info("Subuser already exists: $email");
                }

                $subuser->assignRole($subUserRole);
            }

        } catch (\Throwable $e) {
            $logMessage = "Error: " . $e->getMessage() . PHP_EOL .
                          "File: " . $e->getFile() . " Line: " . $e->getLine() . PHP_EOL .
                          "Trace: " . $e->getTraceAsString();

            file_put_contents(base_path('seeder_error.txt'), $logMessage);
            $this->command->error("Error logged to seeder_error.txt");
        }
    }
}