<?php

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

/**
 * Apagar una licencia, con motivo y con quién lo hizo.
 *
 * **El mismo agujero que tenían las bajas de cliente**, un nivel más abajo.
 * `toggleActive()` invertía `active` y guardaba: un clic y todos los entornos de esa
 * licencia empiezan a recibir «Licencia desactivada» en la siguiente sincronización. Sin
 * confirmación, sin decir a cuántos afecta y **sin ningún rastro** de quién ni por qué.
 *
 * Y la pregunta llega siempre: seis meses después, «¿esta licencia está apagada porque
 * el cliente no pagó, porque acabó una prueba, o porque alguien se equivocó?». Sin
 * motivo escrito, no hay forma de saberlo —solo se puede volver a encenderla y esperar—.
 *
 * `active` se queda como es: es el interruptor que lee el middleware. Lo que se añade es
 * el contexto de la decisión.
 *
 * **Solo para el apagado a mano.** Una licencia caducada no lleva nada de esto: su
 * motivo es la fecha, y ya está en `end_at`.
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('license_tokens', function (Blueprint $table) {
            // Cuándo se apagó. Nulo = nunca se apagó a mano.
            $table->timestamp('deactivated_at')->nullable()->after('active');

            // Quién. `nullOnDelete` y no cascade: si el usuario que la apagó se borra, el
            // hecho de que se apagara no desaparece.
            $table->foreignId('deactivated_by')
                ->nullable()
                ->after('deactivated_at')
                ->constrained('users')
                ->nullOnDelete();

            $table->string('deactivation_reason', 500)->nullable()->after('deactivated_by');
        });
    }

    public function down(): void
    {
        Schema::table('license_tokens', function (Blueprint $table) {
            $table->dropConstrainedForeignId('deactivated_by');
            $table->dropColumn(['deactivated_at', 'deactivation_reason']);
        });
    }
};
