<?php

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

/**
 * `users.last_login_at`: el último acceso, que hasta ahora no se guardaba en ningún sitio.
 *
 * **Ojo con la historia de esta columna**, porque parece que vuelve algo que se quitó y no
 * es eso. `User::$fillable` declaraba `last_login_at` y `last_login_ip_address` **sin que
 * existieran en la tabla**: eran una mina —cualquier `create()` que las incluyera habría
 * petado con *unknown column*—. Se quitaron de ahí, y el «último acceso» se resolvió
 * sacándolo de `sessions` con un `MAX(last_activity)`.
 *
 * Y eso está bien para «¿está dentro ahora?», pero **no sirve para «¿cuándo entró por
 * última vez?»**: `sessions` guarda solo las sesiones vivas y las borra a los
 * `SESSION_LIFETIME` minutos —120— con la lotería 2/100 de `StartSession`. Así que la
 * pantalla de Usuarios afirmaba **«Nunca ha entrado — alta sin estrenar»** de cualquiera
 * que no tuviera una pestaña abierta en ese momento. Ese es el resto de MGR-017: el dato se
 * pintaba, pero significaba otra cosa.
 *
 * La columna **no entra en `$fillable`**: no se edita en ningún formulario, la escribe solo
 * el listener del evento `Login`.
 *
 * **No hay backfill posible**: nadie guardaba el dato, así que las filas existentes se
 * quedan a NULL y la pantalla las distingue por `created_at` —ver
 * `User::REGISTRO_DE_ACCESOS_DESDE`—. Se cura solo: en cuanto cada uno entre una vez, deja
 * de haber NULLs antiguos.
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->timestamp('last_login_at')->nullable()->after('email_verified_at');
        });
    }

    public function down(): void
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('last_login_at');
        });
    }
};
