<?php

namespace App\Observers;

use App\Models\Amministratore;
use Illuminate\Support\Facades\DB;

class AmministratoreObserver
{
    /**
     * Handle the Amministratore "creating" event.
     */
    public function creating(Amministratore $amministratore): void
    {
        if (empty($amministratore->codice_univoco)) {
            $amministratore->codice_univoco = $this->generateCodiceUnivoco();
        }
    }

    /**
     * Genera un codice univoco di 8 caratteri alfanumerici
     */
    private function generateCodiceUnivoco(): string
    {
        $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        
        do {
            $codice = '';
            for ($i = 0; $i < 8; $i++) {
                $codice .= $characters[random_int(0, 35)];
            }
            
            $exists = DB::table('amministratori')->where('codice_univoco', $codice)->exists();
        } while ($exists);
        
        return $codice;
    }
}
