<?php

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

/**
 * El catálogo de plugins propios: qué `component` de Moodle es nuestro.
 *
 * **Por qué no basta el catálogo de Productos.** Un producto lleva ficha, licencias,
 * contenido versionado y su formulario de alta es largo. Pero **no todos nuestros plugins
 * son productos comerciales**: `format_fresk`, `local_tresipuntsepelite` o
 * `local_tresipuntimportgc` son plugins nuestros que nadie licencia por separado, y
 * forzarlos a ser un Producto es meterlos donde no encajan —y obliga a rellenar seis
 * campos para decir una sola cosa—.
 *
 * Esta tabla dice exactamente eso: **este identificador es nuestro**. Una fila, un
 * `component`.
 *
 * **Y sustituye a una lista escrita en el código.** Antes la pantalla de inventario
 * reconocía nuestros plugins buscando «tresipunt», «fresk», «fundae» o «3ip» en el
 * identificador, con dos problemas: `local_courseai` es nuestro y no lleva ninguna de esas
 * palabras, y cualquier plugin de terceros con «fundae» en el nombre se colaba. Además,
 * añadir uno obligaba a desplegar.
 *
 * Los dos catálogos conviven y los dos identifican: un plugin es nuestro si está aquí
 * **o** si es un producto. Lo que no vale es adivinarlo por el nombre.
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::create('own_plugins', function (Blueprint $table) {
            $table->id();

            // El identificador de Moodle: `local_tresipunt`, `theme_fresk`. Es la clave
            // real —lo que llega en el inventario de cada entorno— y no puede repetirse.
            $table->string('component', 191)->unique();

            // Para leerlo: «3iPunt», «Fresk Format». Puede venir del inventario, así que
            // es opcional.
            $table->string('name')->nullable();

            // Por qué está en la lista, si hace falta decirlo: «lo mantiene Dani», «viene
            // del SEPE», «solo en pre». Es texto libre a propósito.
            $table->string('notes', 500)->nullable();

            $table->timestamps();

            // Lógico: quitar uno de la lista no debería perder quién lo puso ni cuándo.
            $table->softDeletes();
        });
    }

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