<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('anagrafica_condominiale', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('amministratore_id')->unsigned()->index()->comment('FK verso amministratori');
            
            // Dati anagrafici base
            $table->string('codice_univoco', 8)->unique()->comment('Codice univoco persona (8 caratteri)');
            $table->enum('tipo_soggetto', ['persona_fisica', 'persona_giuridica', 'ditta_individuale'])->default('persona_fisica');
            $table->string('cognome')->nullable()->comment('Cognome (se persona fisica)');
            $table->string('nome')->nullable()->comment('Nome (se persona fisica)');
            $table->string('denominazione')->nullable()->comment('Denominazione (se persona giuridica)');
            $table->string('codice_fiscale', 16)->comment('Codice fiscale');
            $table->string('partita_iva', 11)->nullable()->comment('Partita IVA (se presente)');
            
            // Dati nascita (solo per persone fisiche)
            $table->date('data_nascita')->nullable();
            $table->string('luogo_nascita')->nullable();
            $table->string('provincia_nascita', 2)->nullable();
            $table->enum('sesso', ['M', 'F'])->nullable();
            
            // Indirizzo residenza/sede legale
            $table->string('indirizzo_residenza')->nullable();
            $table->string('cap_residenza', 5)->nullable();
            $table->string('citta_residenza')->nullable();
            $table->string('provincia_residenza', 2)->nullable();
            $table->string('nazione_residenza', 2)->default('IT');
            
            // Indirizzo domicilio (se diverso da residenza)
            $table->boolean('domicilio_diverso')->default(false);
            $table->string('indirizzo_domicilio')->nullable();
            $table->string('cap_domicilio', 5)->nullable();
            $table->string('citta_domicilio')->nullable();
            $table->string('provincia_domicilio', 2)->nullable();
            $table->string('nazione_domicilio', 2)->nullable();
            
            // Stato e note
            $table->enum('stato', ['attivo', 'inattivo', 'deceduto', 'trasferito'])->default('attivo');
            $table->text('note')->nullable();
            
            // Metadata per sincronizzazione Google Contacts
            $table->string('google_contact_id')->nullable()->comment('ID contatto Google per sincronizzazione');
            $table->timestamp('ultima_sincronizzazione_google')->nullable();
            
            $table->timestamps();
            $table->softDeletes();
            
            // Indici per performance
            $table->index(['amministratore_id', 'stato']);
            $table->index(['codice_fiscale']);
            $table->index(['tipo_soggetto']);
        });
    }

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