<?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('contratti_locazione', function (Blueprint $table) {
            $table->id();
            $table->bigInteger('unita_immobiliare_id')->unsigned()->comment('FK verso unita_immobiliari');
            $table->bigInteger('locatore_id')->unsigned()->comment('FK verso anagrafica_condominiale (proprietario)');
            $table->bigInteger('conduttore_id')->unsigned()->comment('FK verso anagrafica_condominiale (inquilino)');
            
            $table->string('numero_contratto')->nullable()->comment('Numero identificativo contratto');
            $table->date('data_contratto')->comment('Data stipula contratto');
            $table->date('data_inizio')->comment('Data inizio locazione');
            $table->date('data_fine')->nullable()->comment('Data fine locazione (null = indeterminato)');
            
            $table->decimal('canone_mensile', 10, 2)->comment('Canone mensile');
            $table->decimal('deposito_cauzionale', 10, 2)->nullable()->comment('Deposito cauzionale');
            
            $table->enum('tipo_contratto', [
                'libero_mercato', 'concordato', 'transitorio', 'studenti', 'altro'
            ])->comment('Tipo di contratto di locazione');
            
            $table->enum('regime_spese', [
                'tutto_inquilino', 'tutto_proprietario', 'ripartizione_confedilizia', 'personalizzato'
            ])->default('ripartizione_confedilizia')->comment('Come vengono ripartite le spese condominiali');
            
            $table->json('configurazione_spese')->nullable()->comment('Configurazione personalizzata spese (se regime = personalizzato)');
            
            $table->enum('stato', ['attivo', 'scaduto', 'risolto', 'sospeso'])->default('attivo');
            $table->text('note')->nullable();
            $table->timestamps();
            $table->softDeletes();
            
            // Indici per performance
            $table->index(['unita_immobiliare_id', 'stato']);
            $table->index(['data_inizio', 'data_fine']);
            $table->index(['locatore_id']);
            $table->index(['conduttore_id']);
        });
    }

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