<?php

use App\Models\System\Config;
use App\Services\System\Settings;
use Illuminate\Database\Migrations\Migration;

/**
 * El interruptor del modo observación, apagado de fábrica.
 *
 * Se despliega **midiendo, no cortando**: los umbrales actuales (20 fallos y 600
 * peticiones por minuto) se eligieron a partir de un único incidente, y el tráfico real
 * de todos los entornos no se conoce hasta verlo. Cortar el primer día con un número
 * puesto a ojo significa dejar sin servicio a un cliente legítimo.
 *
 * Con esto apagado: los contadores cuentan, las incidencias se registran, los avisos se
 * envían y la pantalla de monitorización muestra qué **se habría** bloqueado. Cuando
 * haya semanas de datos, se ajustan los topes y se enciende desde el panel.
 */
return new class extends Migration
{
    public function up(): void
    {
        Config::updateOrCreate(
            [
                'model' => Settings::AMBITO,
                'model_id' => '0',
                'shortname' => Settings::LIMITES_CORTAN,
            ],
            [
                'name' => 'Límites de la API → Cortar de verdad',
                'type' => 'checkbox',
                'mode' => 'wr',
                'permission' => 'admin.configs.edit',
                'desc' => 'Apagado: los límites solo observan y registran, y las peticiones pasan '
                    . '(modo recomendado al empezar). Encendido: las peticiones que se pasen del '
                    . 'límite reciben un 429 y ese sitio deja de recibir contenido.',
                'value' => Config::where('model', Settings::AMBITO)
                    ->where('shortname', Settings::LIMITES_CORTAN)
                    ->value('value') ?? '0',
            ]
        );
    }

    public function down(): void
    {
        Config::where('shortname', Settings::LIMITES_CORTAN)->forceDelete();
    }
};
