<?php

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

/**
 * Ajustes de los avisos de licencias que caducan.
 *
 * Destinatarios **separados** de los de bloqueo: un bloqueo de la API es cosa de
 * Sistemas y una licencia que caduca es cosa de Comercial y Soporte. Vacíos a
 * propósito, igual que los de bloqueo.
 *
 * Ver `alerts-and-settings.md`.
 */
return new class extends Migration
{
    public function up(): void
    {
        $ajustes = [
            [
                'shortname' => Settings::LICENCIAS_EMAIL,
                'name' => 'Avisos de licencias → Destinatarios',
                'type' => 'email',
                'value' => '',
                'desc' => 'Direcciones a las que se avisa cuando una licencia va a caducar o ya ha '
                    . 'caducado. Distintas de las de bloqueo. Varias separadas por comas.',
            ],
            [
                'shortname' => Settings::LICENCIAS_ACTIVO,
                'name' => 'Avisos de licencias → Activados',
                'type' => 'checkbox',
                'value' => '1',
                'desc' => 'Avisa por correo antes de que caduque y el día que caduca. La '
                    . 'desactivación de las caducadas ocurre igual, aunque esto esté apagado.',
            ],
            [
                'shortname' => Settings::LICENCIAS_DIAS,
                'name' => 'Avisos de licencias → Días de antelación',
                'type' => 'number',
                'value' => '10',
                'desc' => 'Cuántos días antes de caducar se manda el aviso previo.',
            ],
        ];

        foreach ($ajustes as $ajuste) {
            Config::updateOrCreate(
                [
                    'model' => Settings::AMBITO,
                    'model_id' => '0',
                    'shortname' => $ajuste['shortname'],
                ],
                [
                    'name' => $ajuste['name'],
                    'type' => $ajuste['type'],
                    'desc' => $ajuste['desc'],
                    'mode' => 'wr',
                    'permission' => 'admin.configs.edit',
                    'value' => Config::where('model', Settings::AMBITO)
                        ->where('shortname', $ajuste['shortname'])
                        ->value('value') ?? $ajuste['value'],
                ]
            );
        }
    }

    public function down(): void
    {
        Config::whereIn('shortname', [
            Settings::LICENCIAS_EMAIL,
            Settings::LICENCIAS_ACTIVO,
            Settings::LICENCIAS_DIAS,
        ])->forceDelete();
    }
};
