<?php

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

/**
 * Marcar un entorno como pendiente de revisar, con nota y nivel.
 *
 * **Lo que faltaba.** Alguien ve que un entorno está mal y no tenía dónde anotarlo: o se
 * quedaba en su cabeza o acababa en un chat. El panel sabía muchas cosas del parque y
 * ninguna la había escrito una persona.
 *
 * Cuatro columnas y el mismo patrón que la baja de un entorno (`deactivated_at`,
 * `deactivated_by`, `deactivation_reason`): **el estado, quién y cuándo**. Sin el «quién» y
 * el «cuándo», una nota de hace cinco meses se lee igual que una de ayer y nadie se atreve a
 * cerrarla.
 *
 * El índice es por `review_flagged_at` y no por el nivel: la pregunta del listado es «¿cuáles
 * están marcados?» —una minoría de las filas— y el nivel solo ordena lo que ya ha salido.
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('environments', function (Blueprint $table) {
            // El texto: qué hay que mirar. Es lo único que un humano escribe de este
            // entorno en todo el panel.
            $table->text('review_note')->nullable()->after('deactivation_reason');

            // `aviso`, `importante` o `urgente`. Ver `App\Support\RevisionDeEntorno`.
            $table->string('review_level', 20)->nullable()->after('review_note');

            // **Marcado = esta fecha no es nula.** No hay un booleano aparte a propósito:
            // dos columnas que dicen lo mismo acaban diciendo cosas distintas.
            $table->timestamp('review_flagged_at')->nullable()->after('review_level');
            $table->unsignedBigInteger('review_flagged_by')->nullable()->after('review_flagged_at');

            $table->index('review_flagged_at', 'environments_review_flagged_idx');
        });
    }

    public function down(): void
    {
        Schema::table('environments', function (Blueprint $table) {
            $table->dropIndex('environments_review_flagged_idx');
            $table->dropColumn(['review_note', 'review_level', 'review_flagged_at', 'review_flagged_by']);
        });
    }
};
