<?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::table('unita_immobiliari', function (Blueprint $table) {
            // Campi mancanti per la tua struttura
            if (!Schema::hasColumn('unita_immobiliari', 'palazzina')) {
                $table->string('palazzina', 10)->nullable()->after('stabile_id')->comment('Palazzina/Fabbricato');
            }
            if (!Schema::hasColumn('unita_immobiliari', 'tipo_utilizzo_id')) {
                $table->bigInteger('tipo_utilizzo_id')->unsigned()->nullable()->after('subalterno')->comment('FK verso tipi_utilizzo');
            }
            if (!Schema::hasColumn('unita_immobiliari', 'millesimi_proprieta')) {
                $table->decimal('millesimi_proprieta', 8, 4)->nullable()->after('vani')->comment('Millesimi di proprietà generale');
            }
            if (!Schema::hasColumn('unita_immobiliari', 'rendita_catastale')) {
                $table->decimal('rendita_catastale', 10, 2)->nullable()->after('millesimi_proprieta')->comment('Rendita catastale');
            }
            if (!Schema::hasColumn('unita_immobiliari', 'codice_univoco')) {
                $table->string('codice_univoco', 8)->unique()->nullable()->after('rendita_catastale')->comment('Codice univoco unità (8 caratteri)');
            }
            if (!Schema::hasColumn('unita_immobiliari', 'stato')) {
                $table->enum('stato', ['attiva', 'inattiva', 'venduta', 'demolita'])->default('attiva')->after('codice_univoco');
            }
            
            // Rinomina campo per chiarezza
            if (Schema::hasColumn('unita_immobiliari', 'fabbricato') && !Schema::hasColumn('unita_immobiliari', 'palazzina_old')) {
                $table->renameColumn('fabbricato', 'palazzina_old');
            }
        });
        
        // Crea indici per performance
        Schema::table('unita_immobiliari', function (Blueprint $table) {
            if (!Schema::hasIndex('unita_immobiliari', ['stabile_id', 'stato'])) {
                $table->index(['stabile_id', 'stato'], 'idx_unita_stabile_stato');
            }
            if (!Schema::hasIndex('unita_immobiliari', ['tipo_utilizzo_id'])) {
                $table->index('tipo_utilizzo_id', 'idx_unita_tipo_utilizzo');
            }
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('unita_immobiliari', function (Blueprint $table) {
            // Rimuove gli indici solo se esistono - con controllo sicuro
            try {
                $table->dropIndex(['stabile_id', 'stato']);
            } catch (\Exception $e) {
                // Indice non esistente, ignora
            }
            
            try {
                $table->dropIndex(['tipo_utilizzo_id']);
            } catch (\Exception $e) {
                // Indice non esistente, ignora
            }
            
            // Rimuove le colonne se esistono
            if (Schema::hasColumn('unita_immobiliari', 'palazzina')) {
                $table->dropColumn('palazzina');
            }
            if (Schema::hasColumn('unita_immobiliari', 'tipo_utilizzo_id')) {
                $table->dropColumn('tipo_utilizzo_id');
            }
            if (Schema::hasColumn('unita_immobiliari', 'millesimi_proprieta')) {
                $table->dropColumn('millesimi_proprieta');
            }
            if (Schema::hasColumn('unita_immobiliari', 'rendita_catastale')) {
                $table->dropColumn('rendita_catastale');
            }
            if (Schema::hasColumn('unita_immobiliari', 'codice_univoco')) {
                $table->dropColumn('codice_univoco');
            }
            if (Schema::hasColumn('unita_immobiliari', 'stato')) {
                $table->dropColumn('stato');
            }
        });
    }
};
