<?php

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

/**
 * Ajustes de fábrica de la pantalla "Configuraciones del Manager".
 *
 * Va como migración y no como seeder para que **el despliegue los cree**: un ajuste que
 * solo existe si alguien se acuerda de pasar el seeder es un ajuste que en producción
 * no está, y entonces la pantalla sale vacía y los avisos no se envían.
 *
 * `updateOrCreate` sobre (model, model_id, shortname): repetirla no duplica filas ni
 * pisa lo que ya haya configurado alguien.
 *
 * Los destinatarios se dejan **vacíos a propósito**: poner un correo inventado sería
 * peor que no poner ninguno —los avisos se irían a un buzón que nadie lee y parecería
 * que está configurado—. La pantalla avisa en rojo mientras no haya ninguno.
 */
return new class extends Migration
{
    public function up(): void
    {
        $ajustes = [
            [
                'shortname' => Settings::AVISOS_EMAIL,
                'name' => 'Avisos de bloqueo → Destinatarios',
                'type' => 'email',
                'value' => '',
                'desc' => 'Direcciones a las que se avisa cuando una IP o un entorno pasan a '
                    . 'bloqueado en la API. Varias separadas por comas. Vacío = no se avisa a nadie.',
            ],
            [
                'shortname' => Settings::AVISOS_ACTIVOS,
                'name' => 'Avisos de bloqueo → Activados',
                'type' => 'checkbox',
                'value' => '1',
                'desc' => 'Manda un correo la primera vez que algo pasa a bloqueado. No se repite '
                    . 'mientras el bloqueo siga abierto.',
            ],
            [
                'shortname' => Settings::RESUMEN_ACTIVO,
                'name' => 'Resumen diario de bloqueos → Activado',
                'type' => 'checkbox',
                'value' => '1',
                'desc' => 'Un correo al día con todos los bloqueos, aunque no haya nada nuevo.',
            ],
            [
                'shortname' => Settings::RESUMEN_HORA,
                'name' => 'Resumen diario de bloqueos → Hora',
                'type' => 'number',
                'value' => '8',
                'desc' => 'Hora del servidor a la que sale el resumen diario (0-23).',
            ],
        ];

        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',
                    // El valor solo se pone al crear: si alguien ya lo ha configurado,
                    // una migración repetida no puede pisárselo.
                    'value' => Config::where('model', Settings::AMBITO)
                        ->where('shortname', $ajuste['shortname'])
                        ->value('value') ?? $ajuste['value'],
                ]
            );
        }
    }

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