<?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
    {
        // Rimuovo i campi millesimi fissi e li sposto nelle tabelle dinamiche
        Schema::table('unita_immobiliari', function (Blueprint $table) {
            // Rimuovo i millesimi fissi (ora gestiti da tabelle_millesimali)
            $table->dropColumn([
                'millesimi_riscaldamento',
                'millesimi_ascensore', 
                'millesimi_scale',
                'millesimi_pulizie',
                'millesimi_custom_1',
                'millesimi_custom_2',
                'millesimi_custom_3'
            ]);
            
            // Rimuovo le superfici fisse (ora gestite dinamicamente)
            $table->dropColumn([
                'superficie_commerciale',
                'superficie_calpestabile',
                'superficie_balconi',
                'superficie_terrazzi'
            ]);
            
            // Rimuovo le classificazioni fisse (ora in tabelle configurabili)
            $table->dropColumn([
                'classe_energetica',
                'stato_conservazione'
            ]);
        });

        // Creo tabella per superfici dinamiche
        Schema::create('superfici_unita', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('unita_immobiliare_id');
            $table->unsignedBigInteger('tipo_superficie_id');
            $table->decimal('valore', 10, 2);
            $table->string('unita_misura')->default('mq');
            $table->date('validita_da')->nullable();
            $table->date('validita_a')->nullable();
            $table->text('note')->nullable();
            $table->unsignedBigInteger('created_by')->nullable();
            $table->timestamps();
            
            $table->foreign('unita_immobiliare_id')->references('id')->on('unita_immobiliari')->onDelete('cascade');
            $table->foreign('tipo_superficie_id')->references('id')->on('tipi_superficie')->onDelete('cascade');
            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');
            
            $table->unique(['unita_immobiliare_id', 'tipo_superficie_id', 'validita_da'], 'unique_unita_superficie_data');
            $table->index(['unita_immobiliare_id', 'validita_da']);
        });

        // Creo tabella per classificazioni dinamiche
        Schema::create('classificazioni_unita', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('unita_immobiliare_id');
            $table->unsignedBigInteger('classificazione_tecnica_id');
            $table->date('validita_da')->nullable();
            $table->date('validita_a')->nullable();
            $table->text('note')->nullable();
            $table->unsignedBigInteger('created_by')->nullable();
            $table->timestamps();
            
            $table->foreign('unita_immobiliare_id')->references('id')->on('unita_immobiliari')->onDelete('cascade');
            $table->foreign('classificazione_tecnica_id')->references('id')->on('classificazioni_tecniche')->onDelete('cascade');
            $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');
            
            $table->unique(['unita_immobiliare_id', 'classificazione_tecnica_id', 'validita_da'], 'unique_unita_classificazione_data');
            $table->index(['unita_immobiliare_id', 'validita_da']);
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('classificazioni_unita');
        Schema::dropIfExists('superfici_unita');
        
        Schema::table('unita_immobiliari', function (Blueprint $table) {
            // Ripristino i campi rimossi
            $table->decimal('millesimi_riscaldamento', 8, 4)->default(0)->after('millesimi_proprieta');
            $table->decimal('millesimi_ascensore', 8, 4)->default(0)->after('millesimi_riscaldamento');
            $table->decimal('millesimi_scale', 8, 4)->default(0)->after('millesimi_ascensore');
            $table->decimal('millesimi_pulizie', 8, 4)->default(0)->after('millesimi_scale');
            $table->decimal('millesimi_custom_1', 8, 4)->default(0)->after('millesimi_pulizie');
            $table->decimal('millesimi_custom_2', 8, 4)->default(0)->after('millesimi_custom_1');
            $table->decimal('millesimi_custom_3', 8, 4)->default(0)->after('millesimi_custom_2');
            
            $table->decimal('superficie_commerciale', 8, 2)->nullable()->after('superficie');
            $table->decimal('superficie_calpestabile', 8, 2)->nullable()->after('superficie_commerciale');
            $table->decimal('superficie_balconi', 8, 2)->nullable()->after('superficie_calpestabile');
            $table->decimal('superficie_terrazzi', 8, 2)->nullable()->after('superficie_balconi');
            
            $table->string('classe_energetica', 5)->nullable()->after('numero_balconi');
            $table->enum('stato_conservazione', ['ottimo', 'buono', 'discreto', 'cattivo'])->default('buono')->after('anno_ristrutturazione');
        });
    }
};
