<?php

namespace Database\Seeders;

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

class CompleteUsersSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        $this->command->info('🚀 Inizializzazione utenti completi per NetGesCon Laravel...');

        // Assicuriamoci che tutti i ruoli esistano
        $this->createRoles();

        // Crea utenti aggiuntivi per i test
        $this->createAdditionalUsers();

        $this->command->info('✅ Seeder utenti completo terminato con successo!');
    }

    /**
     * Crea tutti i ruoli necessari
     */
    private function createRoles(): void
    {
        $roles = [
            'super-admin' => 'Super Amministratore',
            'amministratore' => 'Amministratore Condominio',
            'collaboratore' => 'Collaboratore Amministratore',
            'condomino' => 'Condomino/Proprietario',
            'fornitore' => 'Fornitore di Servizi',
            'inquilino' => 'Inquilino',
            'servizi' => 'Servizi Tecnici',
            'ospite' => 'Ospite (Solo Lettura)',
        ];

        foreach ($roles as $roleName => $description) {
            Role::firstOrCreate(['name' => $roleName, 'guard_name' => 'web']);
            $this->command->info("✓ Ruolo creato: {$roleName} ({$description})");
        }
    }

    /**
     * Crea utenti aggiuntivi per completare i test
     */
    private function createAdditionalUsers(): void
    {
        $additionalUsers = [
            // Collaboratori
            [
                'name' => 'Collaboratore Test',
                'email' => 'collaboratore@example.com',
                'password' => 'password',
                'role' => 'collaboratore'
            ],
            
            // Fornitori
            [
                'name' => 'Fornitore Test',
                'email' => 'fornitore@example.com',
                'password' => 'password',
                'role' => 'fornitore'
            ],
            [
                'name' => 'Ditta Pulizie',
                'email' => 'pulizie@example.com',
                'password' => 'password',
                'role' => 'fornitore'
            ],
            [
                'name' => 'Ditta Manutenzione',
                'email' => 'manutenzione@example.com',
                'password' => 'password',
                'role' => 'fornitore'
            ],
            [
                'name' => 'Tecnici Impianti',
                'email' => 'impianti@example.com',
                'password' => 'password',
                'role' => 'fornitore'
            ],

            // Servizi
            [
                'name' => 'Servizio Tecnico',
                'email' => 'servizi@example.com',
                'password' => 'password',
                'role' => 'servizi'
            ],
            [
                'name' => 'Portiere Test',
                'email' => 'portiere@example.com',
                'password' => 'password',
                'role' => 'servizi'
            ],

            // Ospiti
            [
                'name' => 'Ospite Test',
                'email' => 'ospite@example.com',
                'password' => 'password',
                'role' => 'ospite'
            ],

            // Utenti per test specifici
            [
                'name' => 'Test Base User',
                'email' => 'test.base@example.com',
                'password' => 'password',
                'role' => 'amministratore'
            ],
            [
                'name' => 'Test Workflow User',
                'email' => 'test.workflow@example.com',
                'password' => 'password',
                'role' => 'amministratore'
            ],
            [
                'name' => 'Test Permissions User',
                'email' => 'test.permissions@example.com',
                'password' => 'password',
                'role' => 'collaboratore'
            ],

            // API Users
            [
                'name' => 'API Developer',
                'email' => 'api.dev@example.com',
                'password' => 'password',
                'role' => 'amministratore'
            ],
            [
                'name' => 'API Test User',
                'email' => 'api.test@example.com',
                'password' => 'password',
                'role' => 'collaboratore'
            ],
        ];

        foreach ($additionalUsers as $userData) {
            $user = User::firstOrCreate(
                ['email' => $userData['email']],
                [
                    'name' => $userData['name'],
                    'password' => Hash::make($userData['password']),
                    'email_verified_at' => now(),
                ]
            );

            // Assegna il ruolo
            if (!$user->hasRole($userData['role'])) {
                $user->assignRole($userData['role']);
            }

            $this->command->info("✓ Utente creato: {$user->name} ({$user->email}) - Ruolo: {$userData['role']}");
        }
    }
}
