<?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) {
            // Aggiungi solo le colonne che mancano davvero

            // Superfici aggiuntive
            $table->decimal('superficie_calpestabile', 8, 2)->nullable()->after('superficie');
            $table->decimal('superficie_balconi', 6, 2)->nullable()->after('superficie_calpestabile');
            $table->decimal('superficie_giardino_privato', 8, 2)->nullable()->after('superficie_balconi');

            // Tipologia moderna con ENUM più ampi
            $table->enum('tipo_unita', [
                'abitazione',
                'studio_professionale',
                'attivita_commerciale',
                'magazzino_deposito',
                'box_garage',
                'cantina',
                'soffitta',
                'spazio_comune_redditizio',
                'locale_tecnico',
                'altro'
            ])->default('abitazione')->after('superficie_giardino_privato');

            $table->enum('utilizzo_attuale', [
                'abitazione_principale',
                'abitazione_secondaria',
                'studio_medico',
                'studio_legale',
                'struttura_ricettiva',
                'attivita_commerciale',
                'locale_commerciale_affitto',
                'sala_eventi_affittabile',
                'parcheggio_pagamento',
                'lavanderia_comune',
                'deposito_attrezzature',
                'ufficio',
                'magazzino',
                'non_utilizzato'
            ])->default('abitazione_principale')->after('tipo_unita');

            // Caratteristiche aggiuntive
            $table->tinyInteger('numero_camere')->nullable()->after('numero_bagni');
            $table->enum('tipo_cucina', ['abitabile', 'cucinotto', 'angolo_cottura', 'assente'])->nullable()->after('numero_camere');

            // Caratteristiche booleane che mancano
            $table->boolean('ha_balconi')->default(false)->after('tipo_cucina');
            $table->boolean('ha_giardino_privato')->default(false)->after('ha_balconi');
            $table->boolean('ha_posto_auto_assegnato')->default(false)->after('ha_giardino_privato');
            $table->boolean('ha_cantina_assegnata')->default(false)->after('ha_posto_auto_assegnato');
            $table->boolean('ha_soffitta_assegnata')->default(false)->after('ha_cantina_assegnata');

            // Impianti specifici
            $table->enum('riscaldamento', ['centralizzato', 'autonomo', 'assente'])->default('centralizzato')->after('ha_soffitta_assegnata');
            $table->boolean('ha_climatizzazione')->default(false)->after('riscaldamento');
            $table->integer('anno_impianto_elettrico')->nullable()->after('ha_climatizzazione');
            $table->integer('anno_impianto_idraulico')->nullable()->after('anno_impianto_elettrico');
            $table->boolean('ha_impianto_gas')->default(false)->after('anno_impianto_idraulico');
            $table->integer('anno_sostituzione_infissi')->nullable()->after('ha_impianto_gas');

            // Millesimi aggiuntivi (usa nomi diversi da quello esistente)
            $table->decimal('millesimi_generali', 6, 3)->nullable()->after('anno_sostituzione_infissi');
            $table->decimal('millesimi_riscaldamento', 6, 3)->nullable()->after('millesimi_generali');
            $table->decimal('millesimi_acqua', 6, 3)->nullable()->after('millesimi_riscaldamento');
            $table->decimal('millesimi_ascensore', 6, 3)->nullable()->after('millesimi_acqua');
            $table->decimal('millesimi_scale', 6, 3)->nullable()->after('millesimi_ascensore');

            // Autorizzazioni e licenze
            $table->string('cin', 20)->nullable()->after('millesimi_scale');
            $table->string('licenza_commerciale', 50)->nullable()->after('cin');
            $table->string('autorizzazione_professionale', 100)->nullable()->after('licenza_commerciale');
            $table->boolean('ha_cambio_destinazione_uso')->default(false)->after('autorizzazione_professionale');
            $table->date('data_scadenza_autorizzazioni')->nullable()->after('ha_cambio_destinazione_uso');
            $table->text('note_autorizzazioni')->nullable()->after('data_scadenza_autorizzazioni');

            // Stato e condizioni (con nomi diversi da quelli esistenti)
            $table->enum('stato_conservazione', ['ottimo', 'buono', 'discreto', 'da_ristrutturare'])->default('buono')->after('note_autorizzazioni');
            $table->integer('anno_ultima_ristrutturazione')->nullable()->after('stato_conservazione');
            $table->enum('stato_occupazione', ['occupata_proprietario', 'occupata_inquilino', 'libera', 'in_vendita', 'in_affitto'])->default('occupata_proprietario')->after('anno_ultima_ristrutturazione');

            // Valutazioni economiche
            $table->decimal('valore_commerciale_stimato', 12, 2)->nullable()->after('stato_occupazione');
            $table->decimal('canone_locazione_mensile', 8, 2)->nullable()->after('valore_commerciale_stimato');
            $table->date('data_ultima_valutazione')->nullable()->after('canone_locazione_mensile');

            // Gestione demo
            $table->boolean('unita_demo')->default(false)->after('data_ultima_valutazione');

            // Campo attiva se non esiste
            if (!Schema::hasColumn('unita_immobiliari', 'attiva')) {
                $table->boolean('attiva')->default(true)->after('unita_demo');
            }
        });

        // Aggiungi foreign key per palazzina_id se non esiste
        try {
            Schema::table('unita_immobiliari', function (Blueprint $table) {
                $table->foreign('palazzina_id')->references('id')->on('palazzine')->onDelete('set null');
            });
        } catch (\Exception $e) {
            // Foreign key potrebbe già esistere
        }

        // Aggiungi constraint unique per codice_unita se non esiste
        try {
            Schema::table('unita_immobiliari', function (Blueprint $table) {
                $table->unique('codice_unita');
            });
        } catch (\Exception $e) {
            // Constraint potrebbe già esistere
        }
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('unita_immobiliari', function (Blueprint $table) {
            // Rimuovi le colonne aggiunte
            $table->dropColumn([
                'superficie_calpestabile',
                'superficie_balconi',
                'superficie_giardino_privato',
                'tipo_unita',
                'utilizzo_attuale',
                'numero_camere',
                'tipo_cucina',
                'ha_balconi',
                'ha_giardino_privato',
                'ha_posto_auto_assegnato',
                'ha_cantina_assegnata',
                'ha_soffitta_assegnata',
                'riscaldamento',
                'ha_climatizzazione',
                'anno_impianto_elettrico',
                'anno_impianto_idraulico',
                'ha_impianto_gas',
                'anno_sostituzione_infissi',
                'millesimi_generali',
                'millesimi_riscaldamento',
                'millesimi_acqua',
                'millesimi_ascensore',
                'millesimi_scale',
                'cin',
                'licenza_commerciale',
                'autorizzazione_professionale',
                'ha_cambio_destinazione_uso',
                'data_scadenza_autorizzazioni',
                'note_autorizzazioni',
                'stato_conservazione',
                'anno_ultima_ristrutturazione',
                'stato_occupazione',
                'valore_commerciale_stimato',
                'canone_locazione_mensile',
                'data_ultima_valutazione',
                'unita_demo'
            ]);
        });
    }
};
