<?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
    {
        // 1. Tipi di superficie configurabili
        Schema::create('tipi_superficie', function (Blueprint $table) {
            $table->id();
            $table->string('nome'); // es: "Commerciale", "Calpestabile", "Balconi", "Terrazzi", "Giardino"
            $table->string('codice')->unique(); // es: "COMM", "CALP", "BALC", "TERR", "GIAR"
            $table->text('descrizione')->nullable();
            $table->boolean('obbligatoria')->default(false); // se deve essere sempre presente
            $table->boolean('per_millesimi')->default(true); // se usata per calcolo millesimi
            $table->string('unita_misura')->default('mq');
            $table->decimal('moltiplicatore_default', 5, 3)->default(1.000); // coefficiente per calcoli
            $table->integer('ordine_visualizzazione')->default(100);
            $table->boolean('attiva')->default(true);
            $table->timestamps();
            
            $table->index('attiva');
            $table->index('ordine_visualizzazione');
        });

        // 2. Classificazioni tecniche configurabili
        Schema::create('classificazioni_tecniche', function (Blueprint $table) {
            $table->id();
            $table->enum('tipo_classificazione', [
                'classe_energetica', 'stato_conservazione', 'tipo_riscaldamento', 
                'tipo_proprieta', 'categoria_catastale', 'destinazione_uso'
            ]);
            $table->string('valore'); // es: "A++", "Ottimo", "Autonomo"
            $table->string('codice')->nullable(); // per compatibilità sistemi esterni
            $table->text('descrizione')->nullable();
            $table->decimal('coefficiente_calcolo', 5, 3)->nullable(); // per calcoli automatici
            $table->string('colore_badge')->nullable(); // per UI
            $table->integer('ordine')->default(100);
            $table->boolean('attiva')->default(true);
            $table->timestamps();
            
            $table->unique(['tipo_classificazione', 'valore'], 'unique_tipo_valore');
            $table->index(['tipo_classificazione', 'attiva']);
        });

        // 3. Configurazioni globali sistema
        Schema::create('configurazioni_sistema', function (Blueprint $table) {
            $table->id();
            $table->string('chiave')->unique(); // es: "millesimi_calcolo_automatico"
            $table->string('valore'); // valore configurazione
            $table->enum('tipo_valore', ['string', 'integer', 'decimal', 'boolean', 'json', 'date']);
            $table->string('categoria'); // es: "millesimi", "contatori", "fatturazione"
            $table->string('nome_visualizzato');
            $table->text('descrizione')->nullable();
            $table->boolean('modificabile_admin')->default(false); // se admin può modificare
            $table->boolean('modificabile_superadmin')->default(true);
            $table->timestamps();
            
            $table->index('categoria');
        });

        // 4. Template configurazioni per stabili
        Schema::create('template_configurazioni', function (Blueprint $table) {
            $table->id();
            $table->string('nome_template'); // es: "Condominio Standard", "Villette a Schiera"
            $table->text('descrizione')->nullable();
            $table->json('configurazioni_default'); // configurazioni predefinite
            $table->json('tabelle_millesimali_default'); // tabelle millesimali da creare
            $table->json('tipi_superficie_incluse'); // tipi superficie da abilitare
            $table->boolean('attivo')->default(true);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('template_configurazioni');
        Schema::dropIfExists('configurazioni_sistema');
        Schema::dropIfExists('classificazioni_tecniche');
        Schema::dropIfExists('tipi_superficie');
    }
};
