<?php

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

/**
 * Retención del log de la API, desactivada de fábrica.
 *
 * `api_request_logs` crece con cada petición de cada entorno y nadie la vacía: es la
 * tabla que hace que el visor se vuelva inusable (MGR-027). Hacía falta poder limpiarla
 * sin entrar al servidor.
 *
 * Viene en 0 —sin borrado automático— a propósito. Una tarea que borra rastro de
 * auditoría no debe empezar a funcionar sola el día del despliegue: primero se ve
 * cuánto histórico hay y cuánto se quiere conservar, y entonces se pone el número desde
 * el panel. Mientras esté en 0, la tarea programada se ejecuta cada noche y no borra
 * nada.
 */
return new class extends Migration
{
    public function up(): void
    {
        Config::updateOrCreate(
            [
                'model' => Settings::AMBITO,
                'model_id' => '0',
                'shortname' => Settings::LOGS_RETENCION,
            ],
            [
                'name' => 'Logs de la API → Días de retención',
                'type' => 'text',
                'mode' => 'wr',
                'permission' => 'admin.configs.edit',
                'desc' => 'Días de histórico que se conservan en el log de peticiones. Cada noche '
                    . 'se borra lo más antiguo. 0 = no se borra nada automáticamente y la tabla '
                    . 'crece sin límite.',
                'value' => Config::where('model', Settings::AMBITO)
                    ->where('shortname', Settings::LOGS_RETENCION)
                    ->value('value') ?? '0',
            ]
        );
    }

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