<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Crea la tabella amministratori moderna con best practice Laravel
     * e supporto per sistema multi-database.
     */
    public function up(): void
    {
        Schema::create('amministratori', function (Blueprint $table) {
            $table->id(); // Chiave primaria standard Laravel
            
            // Codice alfanumerico unico di 8 caratteri per identificazione
            $table->string('codice_amministratore', 8)->unique();
            $table->index('codice_amministratore');
            
            // Dati amministratore
            $table->string('ragione_sociale');
            $table->string('nome')->nullable();
            $table->string('cognome')->nullable();
            $table->string('codice_fiscale', 16)->unique();
            $table->string('partita_iva', 11)->nullable();
            
            // Contatti
            $table->string('indirizzo')->nullable();
            $table->string('cap', 5)->nullable();
            $table->string('citta')->nullable();
            $table->string('provincia', 2)->nullable();
            $table->string('telefono')->nullable();
            $table->string('cellulare')->nullable();
            $table->string('email')->unique();
            $table->string('pec')->nullable();
            $table->string('sito_web')->nullable();
            
            // Sistema multi-database e cartelle
            $table->string('database_name', 8)->nullable(); // Nome DB dedicato (stesso del codice)
            $table->string('cartella_dati', 255)->nullable(); // Percorso cartella dati
            $table->boolean('database_attivo')->default(false); // Se ha DB separato
            $table->string('server_database')->nullable(); // Server hosting DB (per distribuzione)
            
            // Configurazioni
            $table->json('configurazioni')->nullable(); // JSON per impostazioni personalizzate
            $table->decimal('commissione_percentuale', 5, 2)->default(0.00);
            $table->decimal('costo_fisso_mensile', 8, 2)->default(0.00);
            
            // Stato e date
            $table->enum('stato', ['attivo', 'sospeso', 'disattivato'])->default('attivo');
            $table->date('data_inizio_attivita')->nullable();
            $table->date('data_scadenza_contratto')->nullable();
            
            // Laravel standard
            $table->timestamps();
            $table->softDeletes();
            
            // Indici per performance
            $table->index(['stato', 'database_attivo']);
            $table->index('codice_fiscale');
            $table->index('email');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('amministratori');
    }
};
