#!/usr/bin/env php
<?php

declare(strict_types=1);

/**
 * Sincroniza a la base los permisos que declaran los módulos.
 *
 *   composer permissions:sync
 *
 * Se ejecuta en cada despliegue: un módulo nuevo trae sus permisos consigo.
 */

use App\Core\Kernel;
use App\Modules\Roles\Services\SincronizadorDePermisos;

require dirname(__DIR__) . '/vendor/autoload.php';

$base = dirname(__DIR__);
Dotenv\Dotenv::createImmutable($base)->safeLoad();

$kernel = new Kernel($base);
$kernel->boot();

$declarados = $kernel->permissions();
if ($declarados === []) {
    fwrite(STDERR, "Ningún módulo declara permisos.\n");
    exit(1);
}

$resultado = $kernel->container()->get(SincronizadorDePermisos::class)->sincronizar($declarados);

printf("Declarados por los módulos: %d\n", count($declarados));
printf("  Creados:      %d%s\n", count($resultado['creados']),
    $resultado['creados'] ? ' → ' . implode(', ', $resultado['creados']) : '');
printf("  Actualizados: %d\n", count($resultado['actualizados']));

if ($resultado['huerfanos'] !== []) {
    // No se borran solos: puede ser un módulo desactivado a propósito, o un typo.
    printf("\n  En la base pero ya no declarados: %s\n", implode(', ', $resultado['huerfanos']));
    printf("  Revísalos y bórralos a mano si corresponde.\n");
}

exit(0);
