<?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
    {
        // 1. Add prefactura & orden de salida fields to seguimiento_reparaciones
        Schema::table('seguimiento_reparaciones', function (Blueprint $table) {
            $table->string('prefactura_numero')->nullable()->after('observaciones');
            $table->decimal('prefactura_monto', 12, 2)->nullable()->after('prefactura_numero');
            $table->string('prefactura_path')->nullable()->after('prefactura_monto');
            $table->boolean('prefactura_correcta')->nullable()->after('prefactura_path');
            $table->string('orden_salida_numero')->nullable()->after('prefactura_correcta');
            $table->timestamp('orden_salida_fecha')->nullable()->after('orden_salida_numero');
            $table->boolean('sias_actualizado')->default(false)->after('orden_salida_fecha');
        });

        // 2. Create proveedor_ejecutivos table (multiple executives per supplier)
        Schema::create('proveedor_ejecutivos', function (Blueprint $table) {
            $table->id();
            $table->foreignId('proveedor_id')->constrained('proveedores')->onDelete('cascade');
            $table->string('nombre');
            $table->string('cargo')->nullable();
            $table->string('telefono')->nullable();
            $table->string('email')->nullable();
            $table->boolean('activo')->default(true);
            $table->timestamps();
        });

        // 3. Create documento_logs table (M3: track who viewed documents)
        Schema::create('documento_logs', function (Blueprint $table) {
            $table->id();
            $table->foreignId('caso_id')->constrained()->onDelete('cascade');
            $table->foreignId('user_id')->nullable()->constrained()->onDelete('set null');
            $table->string('tipo_documento'); // aviso_siniestro, cuadro_comparativo, etc.
            $table->string('nombre_archivo')->nullable();
            $table->string('accion')->default('visto'); // visto, descargado
            $table->timestamp('fecha_interaccion')->useCurrent();
            $table->timestamps();
        });

        // 4. Create scheduled_notifications table (M6: timer 5h + reminders)
        Schema::create('scheduled_notifications', function (Blueprint $table) {
            $table->id();
            $table->foreignId('caso_id')->constrained()->onDelete('cascade');
            $table->string('tipo'); // cotizacion_reminder, entrega_reminder, etc.
            $table->timestamp('programada_para');
            $table->timestamp('enviada_en')->nullable();
            $table->boolean('activa')->default(true);
            $table->json('data')->nullable();
            $table->integer('intentos')->default(0);
            $table->timestamps();

            $table->index(['activa', 'programada_para']);
        });

        // 5. Add approval token fields to casos for external links
        Schema::table('casos', function (Blueprint $table) {
            $table->string('token_aprobacion')->nullable()->after('cuadro_comparativo_path');
            $table->timestamp('token_expira_en')->nullable()->after('token_aprobacion');
            $table->string('aprobacion_estado')->nullable()->after('token_expira_en'); // pendiente, aceptado, rechazado
            $table->string('tipo_compra_taller')->nullable()->after('aprobacion_estado'); // dealer, multimarca, dealer_multimarca, taller_asegurado
            $table->string('sub_tipo_ajuste')->nullable()->after('tipo_ajuste'); // second selection field
        });

        // 6. Add entrega fields to cotizaciones
        Schema::table('cotizaciones', function (Blueprint $table) {
            $table->timestamp('fecha_entrega_prometida')->nullable()->after('fecha_limite');
            $table->timestamp('fecha_entrega_confirmada')->nullable()->after('fecha_entrega_prometida');
            $table->string('confirmacion_documento_path')->nullable()->after('fecha_entrega_confirmada');
            $table->boolean('entrega_confirmada_taller')->default(false)->after('confirmacion_documento_path');
            $table->boolean('requiere_recotizacion')->default(false)->after('entrega_confirmada_taller');
        });
    }

    public function down(): void
    {
        Schema::table('seguimiento_reparaciones', function (Blueprint $table) {
            $table->dropColumn([
                'prefactura_numero',
                'prefactura_monto',
                'prefactura_path',
                'prefactura_correcta',
                'orden_salida_numero',
                'orden_salida_fecha',
                'sias_actualizado',
            ]);
        });

        Schema::dropIfExists('proveedor_ejecutivos');
        Schema::dropIfExists('documento_logs');
        Schema::dropIfExists('scheduled_notifications');

        Schema::table('casos', function (Blueprint $table) {
            $table->dropColumn([
                'token_aprobacion',
                'token_expira_en',
                'aprobacion_estado',
                'tipo_compra_taller',
                'sub_tipo_ajuste',
            ]);
        });

        Schema::table('cotizaciones', function (Blueprint $table) {
            $table->dropColumn([
                'fecha_entrega_prometida',
                'fecha_entrega_confirmada',
                'confirmacion_documento_path',
                'entrega_confirmada_taller',
                'requiere_recotizacion',
            ]);
        });
    }
};
