<?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('seguimientos_judiciales', function (Blueprint $table) {
            $table->id();
            $table->foreignId('proceso_id')->constrained('procesos')->cascadeOnDelete();
            $table->foreignId('user_id')->constrained('users')->restrictOnDelete();

            $table->date('fecha_revision')->comment('Fecha en que se hizo la revisión');
            $table->enum('tipo_novedad', [
                'auto',
                'sentencia',
                'notificacion',
                'inadmision',
                'mandamiento_pago',
                'medida_cautelar',
                'audiencia',
                'impulso_procesal',
                'remision',
                'otro'
            ]);

            $table->string('numero_auto')->nullable()->comment('Número auto/providencia');
            $table->date('fecha_auto')->nullable()->comment('Fecha del auto/providencia');
            $table->text('descripcion')->comment('Resumen de la novedad');

            $table->enum('etapa_resultante', [
                'calificacion', 'mandamiento', 'notificacion', 'excepciones',
                'medidas_cautelares', 'sentencia', 'liquidacion', 'remate',
                'audiencia', 'na'
            ])->nullable()->comment('Si la novedad cambió la etapa procesal');

            $table->boolean('requiere_accion')->default(false);
            $table->string('accion_requerida')->nullable();
            $table->date('fecha_limite_accion')->nullable();
            $table->boolean('accion_completada')->default(false);

            $table->string('archivo_adjunto')->nullable();
            $table->string('fuente')->nullable()->default('manual')->comment('manual|monolegal|rama_judicial');

            $table->timestamps();

            $table->index(['proceso_id', 'fecha_revision']);
            $table->index('tipo_novedad');
        });
    }

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