<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('credit_restructure_logs', function (Blueprint $table) {
            $table->id();

            // Crédito original
            $table->foreignId('original_credit_id')
                ->constrained('credits')
                ->cascadeOnDelete();

            // Crédito nuevo generado por la operación
            $table->foreignId('new_credit_id')
                ->nullable()
                ->constrained('credits')
                ->nullOnDelete();

            // Multi-tenant
            $table->foreignId('company_id')
                ->constrained()
                ->cascadeOnDelete();

            // Usuario que ejecutó la reestructuración/refinanciación
            $table->foreignId('performed_by_user_id')
                ->constrained('users')
                ->cascadeOnDelete();

            // Tipo de operación
            $table->enum('type', [
                'restructure',
                'refinance',
                'renewal',
                'extension',
                'interest_capitalization',
                'condonation',
            ])->comment('Tipo de operación realizada sobre el crédito.');

            // Datos financieros implicados
            $table->decimal('previous_balance', 12, 2)
                ->comment('Saldo antes de la operación.');

            $table->decimal('new_principal', 12, 2)
                ->comment('Nuevo capital del crédito.');

            $table->decimal('new_interest_rate', 5, 2)
                ->nullable()
                ->comment('Nueva tasa aplicada si aplica.');

            $table->unsignedInteger('new_installment_count')
                ->nullable()
                ->comment('Nuevo número de cuotas.');

            $table->string('new_periodicity')
                ->nullable()
                ->comment('Periodicidad nueva.');

            // Capital adicional (solo para refinanciación)
            $table->decimal('additional_capital', 12, 2)
                ->default(0)
                ->comment('Valor adicional prestado en la refinanciación.');

            // Intereses vencidos que fueron capitalizados
            $table->decimal('capitalized_interest', 12, 2)
                ->default(0)
                ->comment('Intereses vencidos agregados al capital.');

            // Justificación
            $table->text('reason')->nullable();

            // JSON con parámetros avanzados
            $table->json('metadata')->nullable();

            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('credit_restructure_logs');
    }
};
