<?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('movimenti_contabili', function (Blueprint $table) {
            // Aggiunge colonne mancanti per la nuova struttura
            if (!Schema::hasColumn('movimenti_contabili', 'codice_movimento')) {
                $table->char('codice_movimento', 8)->unique()->after('id')->comment('Codice alfanumerico univoco 8 caratteri');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'stato_movimento')) {
                $table->enum('stato_movimento', ['prima_nota', 'bozza', 'confermato', 'chiuso'])->default('prima_nota')->after('documento_id');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'data_prima_nota')) {
                $table->timestamp('data_prima_nota')->nullable()->after('stato_movimento');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'data_conferma')) {
                $table->timestamp('data_conferma')->nullable()->after('data_prima_nota');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'confermato_da')) {
                $table->unsignedBigInteger('confermato_da')->nullable()->after('data_conferma');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'categoria_movimento')) {
                $table->enum('categoria_movimento', ['ordinario', 'straordinario', 'fondo', 'lavori'])->default('ordinario')->after('tipo_movimento');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'iva')) {
                $table->decimal('iva', 10, 2)->default(0)->after('ritenuta_acconto');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'dettagli_partita_doppia')) {
                $table->json('dettagli_partita_doppia')->nullable()->after('importo_netto')->comment('Struttura per dare/avere futuro');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'note_interne')) {
                $table->text('note_interne')->nullable()->after('dettagli_partita_doppia');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'creato_da')) {
                $table->unsignedBigInteger('creato_da')->nullable()->after('note_interne');
            }
            
            if (!Schema::hasColumn('movimenti_contabili', 'modificato_da')) {
                $table->unsignedBigInteger('modificato_da')->nullable()->after('creato_da');
            }
        });
        
        // Aggiunge foreign keys dopo aver creato le colonne
        Schema::table('movimenti_contabili', function (Blueprint $table) {
            // Foreign keys solo se non esistono già
            if (Schema::hasColumn('movimenti_contabili', 'confermato_da')) {
                $table->foreign('confermato_da')->references('id')->on('users')->onDelete('set null');
            }
            
            if (Schema::hasColumn('movimenti_contabili', 'creato_da')) {
                $table->foreign('creato_da')->references('id')->on('users')->onDelete('set null');
            }
            
            if (Schema::hasColumn('movimenti_contabili', 'modificato_da')) {
                $table->foreign('modificato_da')->references('id')->on('users')->onDelete('set null');
            }
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('movimenti_contabili', function (Blueprint $table) {
            // Rimuove foreign keys
            $table->dropForeign(['confermato_da']);
            $table->dropForeign(['creato_da']);
            $table->dropForeign(['modificato_da']);
            
            // Rimuove colonne aggiunte
            $table->dropColumn([
                'codice_movimento',
                'stato_movimento',
                'data_prima_nota',
                'data_conferma',
                'confermato_da',
                'categoria_movimento',
                'iva',
                'dettagli_partita_doppia',
                'note_interne',
                'creato_da',
                'modificato_da'
            ]);
        });
    }
};
