<?php
ob_start();
require_once __DIR__ . '/init.php';

if (($_SESSION['admin']['rol'] ?? '') !== 'Superadmin') {
    header('Location: index.php?status=error&msg=' . urlencode('Acceso denegado.'));
    exit;
}

$flash = '';
$flash_status = '';

try {
    $roleRows = $pdo->query("SELECT id, nombre_rol FROM roles WHERE nombre_rol IN ('Admin', 'Ayudante de Superadmin')")->fetchAll(PDO::FETCH_KEY_PAIR);
    $adminRoleId = (int) array_search('Admin', $roleRows, true);
    $helperRoleId = (int) array_search('Ayudante de Superadmin', $roleRows, true);
    if ($adminRoleId <= 0 || $helperRoleId <= 0) {
        throw new RuntimeException('No se encontraron los roles requeridos para administrar ayudantes.');
    }
} catch (Throwable $e) {
    $adminRoleId = 2;
    $helperRoleId = 3;
    error_log('gestionar_ayudantes roles: ' . $e->getMessage());
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
    Security::requireCsrf();
    $id_usuario = filter_input(INPUT_POST, 'id_usuario', FILTER_VALIDATE_INT);
    $action = trim((string) $_POST['action']);

    if (!$id_usuario) {
        $flash = 'Selecciona un usuario válido.';
        $flash_status = 'error';
    } else {
        try {
            if ($action === 'promover') {
                $stmt_user = $pdo->prepare('SELECT id_rol FROM usuarios WHERE id = ? AND id_rol = ? LIMIT 1');
                $stmt_user->execute([$id_usuario, $adminRoleId]);
                $rol_previo = $stmt_user->fetchColumn();
                if (!$rol_previo) {
                    throw new RuntimeException('El usuario ya no está disponible para ser promovido.');
                }

                $stmt_update = $pdo->prepare('UPDATE usuarios SET id_rol = ?, id_rol_previo = ? WHERE id = ?');
                $stmt_update->execute([$helperRoleId, $rol_previo, $id_usuario]);
                $flash = 'Usuario promovido a Ayudante de Superadmin con éxito.';
                $flash_status = 'success';
            } elseif ($action === 'revocar') {
                $stmt_user = $pdo->prepare('SELECT id_rol_previo FROM usuarios WHERE id = ? AND id_rol = ? LIMIT 1');
                $stmt_user->execute([$id_usuario, $helperRoleId]);
                $rol_a_restaurar = (int) ($stmt_user->fetchColumn() ?: $adminRoleId);

                $stmt_update = $pdo->prepare('UPDATE usuarios SET id_rol = ?, id_rol_previo = NULL WHERE id = ? AND id_rol = ?');
                $stmt_update->execute([$rol_a_restaurar, $id_usuario, $helperRoleId]);
                if ($stmt_update->rowCount() === 0) {
                    throw new RuntimeException('El usuario ya no tiene el rol de Ayudante.');
                }
                $flash = 'Se revocaron los privilegios y se restauró el rol anterior.';
                $flash_status = 'success';
            } else {
                throw new RuntimeException('La acción solicitada no es válida.');
            }
        } catch (Throwable $e) {
            $flash = $e->getMessage();
            $flash_status = 'error';
        }
    }

    header('Location: gestionar_ayudantes.php?status=' . urlencode($flash_status) . '&msg=' . urlencode($flash));
    exit;
}

if (isset($_GET['status'], $_GET['msg'])) {
    $flash = (string) $_GET['msg'];
    $flash_status = (string) $_GET['status'];
}

try {
    $stmtHelpers = $pdo->prepare('SELECT id, nombre_usuario, correo FROM usuarios WHERE id_rol = ? ORDER BY nombre_usuario, correo');
    $stmtHelpers->execute([$helperRoleId]);
    $ayudantes_actuales = $stmtHelpers->fetchAll(PDO::FETCH_ASSOC);

    $stmtPromotable = $pdo->prepare('SELECT id, nombre_usuario, correo FROM usuarios WHERE id_rol = ? ORDER BY nombre_usuario, correo');
    $stmtPromotable->execute([$adminRoleId]);
    $usuarios_promovibles = $stmtPromotable->fetchAll(PDO::FETCH_ASSOC);

    $stmtRolePermissions = $pdo->prepare(
        "SELECT p.clave_permiso, COALESCE(NULLIF(p.descripcion, ''), p.clave_permiso) AS descripcion
         FROM rol_permiso rp
         JOIN permisos p ON p.id = rp.id_permiso
         WHERE rp.id_rol = ?
         ORDER BY p.descripcion, p.clave_permiso"
    );
    $stmtRolePermissions->execute([$adminRoleId]);
    $permisos_admin = $stmtRolePermissions->fetchAll(PDO::FETCH_ASSOC);
    $stmtRolePermissions->execute([$helperRoleId]);
    $permisos_ayudante = $stmtRolePermissions->fetchAll(PDO::FETCH_ASSOC);

    $permisos_efectivos = [];
    foreach (array_merge($permisos_admin, $permisos_ayudante) as $permiso) {
        $permisos_efectivos[(string) $permiso['clave_permiso']] = $permiso;
    }
    $permisos_efectivos = array_values($permisos_efectivos);
} catch (Throwable $e) {
    $ayudantes_actuales = [];
    $usuarios_promovibles = [];
    $permisos_admin = [];
    $permisos_ayudante = [];
    $permisos_efectivos = [];
    $flash = 'No se pudieron cargar los ayudantes: ' . $e->getMessage();
    $flash_status = 'error';
}

$titulo_pagina = 'Asignar Ayudante de Superadmin';
require_once 'admin_header.php';
require_once __DIR__ . '/includes/superadmin_ui_helpers.php';
?>

<style>
/* Unifica los módulos de Administración con el ancho de Plataformas y Dominios. */
.sa-admin-section-page{
    width:min(1480px,100%)!important;
    max-width:1480px!important;
    margin:18px auto 0!important;
}
.sa-admin-section-page>.sa-module-hero,
.sa-admin-section-page>.sa-summary-grid,
.sa-admin-section-page>.sa-records-panel,
.sa-admin-section-page>.sa-split-layout,
.sa-admin-section-page>.sa-report-card{
    width:100%;
}
.sa-admin-cards-2>.sa-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
.sa-admin-cards-3>.sa-summary-grid{grid-template-columns:repeat(3,minmax(0,1fr));}
.sa-admin-cards-4>.sa-summary-grid{grid-template-columns:repeat(4,minmax(0,1fr));}
@media(max-width:1050px){
    .sa-admin-cards-2>.sa-summary-grid,
    .sa-admin-cards-3>.sa-summary-grid,
    .sa-admin-cards-4>.sa-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media(max-width:720px){
    .sa-admin-section-page{margin-top:10px!important;}
    .sa-admin-cards-2>.sa-summary-grid,
    .sa-admin-cards-3>.sa-summary-grid,
    .sa-admin-cards-4>.sa-summary-grid{grid-template-columns:1fr;}
}
</style>

<style>
.sa-helper-page .sa-module-hero__actions{
    width:auto!important;
    max-width:none!important;
    flex:0 0 auto!important;
    flex-direction:row!important;
    align-items:center!important;
    justify-content:flex-end!important;
}
.sa-helper-page #openHelperModal{
    width:auto!important;
    min-width:0!important;
    max-width:max-content!important;
    height:40px!important;
    min-height:40px!important;
    flex:0 0 auto!important;
    padding:0 14px!important;
    align-self:center!important;
}
.sa-helper-page #openHelperModal i{
    width:18px;
    height:18px;
    display:grid;
    place-items:center;
    flex:0 0 18px;
    font-size:10px;
}
@media(max-width:720px){
    .sa-helper-page .sa-module-hero__actions{width:100%!important;justify-content:flex-start!important;}
    .sa-helper-page #openHelperModal{width:auto!important;max-width:100%!important;}
}
.sa-helper-permission-box{margin:12px 0;padding:12px;border:1px solid #dbe4ef;border-radius:13px;background:#f8fafc}
.sa-helper-permission-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;color:#172033;font-size:12px}
.sa-helper-permission-head strong{display:inline-flex;align-items:center;gap:7px}
.sa-helper-permission-head i{color:#7c3aed}.sa-helper-permission-head a{color:#dc2626;font-size:10.5px;font-weight:850;text-decoration:none}
.sa-helper-permission-list{display:flex;flex-wrap:wrap;gap:6px;max-height:150px;overflow:auto}
.sa-helper-permission-list span{display:inline-flex;align-items:center;gap:5px;padding:5px 8px;border:1px solid #ddd6fe;border-radius:999px;background:#fff;color:#5b21b6;font-size:10px;font-weight:800}
.sa-helper-permission-list i{font-size:8px}.sa-helper-permission-list.is-base span{border-color:#bfdbfe;color:#1d4ed8}.sa-helper-permission-head>span{color:#64748b;font-size:10px;font-weight:850}
</style>
<div class="sa-page sa-admin-section-page sa-admin-cards-3 sa-helper-page">
<?php
sa_render_module_hero([
    'icon' => 'fa-user-gear',
    'eyebrow' => 'EQUIPO ADMINISTRATIVO',
    'title' => 'Ayudantes',
    'description' => '',
    'count' => count($ayudantes_actuales),
    'action' => [
        'label' => 'Promover ayudante',
        'icon' => 'fa-user-plus',
        'attrs' => 'id="openHelperModal"' . (!$usuarios_promovibles ? ' disabled' : ''),
    ],
]);
sa_render_summary_cards([
    ['label'=>'Ayudantes actuales','value'=>count($ayudantes_actuales),'icon'=>'fa-user-gear','hint'=>'Equipo con acceso delegado'],
    ['label'=>'Admins promovibles','value'=>count($usuarios_promovibles),'icon'=>'fa-user-plus','tone'=>'is-blue','hint'=>'Disponibles para asignar'],
    ['label'=>'Permisos efectivos','value'=>count($permisos_efectivos),'icon'=>'fa-key','tone'=>'is-violet','hint'=>'Base Admin + delegados'],
]);
?>

<section class="sa-records-panel">
    <header class="sa-records-panel__header">
        <div class="sa-records-panel__heading"><span class="sa-records-panel__icon"><i class="fas fa-users-gear"></i></span><div><h2>Ayudantes actuales</h2><p>Busca integrantes del equipo y revoca el acceso para restaurar su rol anterior.</p></div></div>
    </header>
    <div class="sa-records-filters is-compact">
        <div class="sa-filter-field"><label for="helperSearch"><i class="fas fa-magnifying-glass"></i> Buscar</label><div class="sa-filter-control"><i class="fas fa-magnifying-glass"></i><input id="helperSearch" type="search" placeholder="Nombre o correo"></div></div>
        <div class="sa-filter-field"><label for="helperPerPage"><i class="fas fa-list-ol"></i> Mostrar</label><select id="helperPerPage"><option value="100">100 registros</option><option value="200">200 registros</option><option value="400">400 registros</option><option value="all">Todos</option></select></div>
        <div class="sa-filter-actions"><button type="button" id="clearHelperFilters" class="sa-btn sa-btn--secondary"><i class="fas fa-eraser"></i> Limpiar</button></div>
    </div>
    <div class="sa-records-counter-row"><span><?= number_format(count($ayudantes_actuales)) ?> ayudante<?= count($ayudantes_actuales) === 1 ? '' : 's' ?> registrado<?= count($ayudantes_actuales) === 1 ? '' : 's' ?></span><span id="helperPageSummary" class="sa-records-counter"></span></div>
    <div class="sa-records-table-wrap">
        <table id="helperTable" class="sa-records-table">
            <thead><tr><th>Ayudante</th><th>Correo</th><th class="is-center">Estado</th><th class="is-center">Acciones</th></tr></thead>
            <tbody>
            <?php foreach ($ayudantes_actuales as $ayudante): ?>
                <tr data-af-row data-search="<?= sa_e(($ayudante['nombre_usuario'] ?? '') . ' ' . ($ayudante['correo'] ?? '')) ?>">
                    <td><span class="sa-table-primary"><i class="fas fa-user-gear"></i> <?= sa_e($ayudante['nombre_usuario']) ?></span><span class="sa-table-secondary">Ayudante de Superadmin · <?= number_format(count($permisos_efectivos)) ?> permisos efectivos</span></td>
                    <td><?= sa_e($ayudante['correo']) ?></td>
                    <td class="is-center"><span class="sa-badge sa-badge--success"><i class="fas fa-circle-check"></i> Activo</span></td>
                    <td class="is-center"><form action="gestionar_ayudantes.php" method="post" class="form-revocar sa-record-actions"><?= Security::csrfField() ?><input type="hidden" name="action" value="revocar"><input type="hidden" name="id_usuario" value="<?= (int) $ayudante['id'] ?>"><button type="submit" class="sa-icon-action sa-icon-action--delete" title="Revocar privilegios"><i class="fas fa-user-minus"></i></button></form></td>
                </tr>
            <?php endforeach; ?>
            </tbody>
        </table>
        <div id="helperEmpty" class="sa-inline-empty" hidden><i class="fas fa-user-gear"></i><strong>No hay ayudantes que coincidan</strong><span>Modifica los filtros o promueve un nuevo ayudante.</span></div>
    </div>
    <footer class="sa-records-footer"><span class="sa-records-footer__note">Los ayudantes conservan las funciones operativas de Admin y suman los permisos delegados definidos para Ayudante de Superadmin.</span><div id="helperPagination" class="sa-pagination"></div></footer>
</section>
</div>

<div id="helperModal" class="af-modal-backdrop" aria-hidden="true">
    <section class="af-modal" role="dialog" aria-modal="true" aria-labelledby="helperModalTitle">
        <header class="af-modal-head"><div class="af-modal-title"><span class="af-modal-icon"><i class="fas fa-user-plus"></i></span><div><h2 id="helperModalTitle">Promover ayudante</h2><p>Selecciona un Admin para añadirle funciones de apoyo sin perder la gestión de su propia operación.</p></div></div><button type="button" class="af-modal-close" data-af-close aria-label="Cerrar"><i class="fas fa-xmark"></i></button></header>
        <form action="gestionar_ayudantes.php" method="post" id="helperForm" data-prevent-double-submit>
            <?= Security::csrfField() ?><input type="hidden" name="action" value="promover">
            <div class="af-modal-body">
                <div class="af-guide"><i class="fas fa-shield-halved"></i><div>Al promoverlo, el usuario <strong>conserva los permisos base de Admin</strong> para administrar sus propios buzones, dominios, clientes, cuentas, suscripción, reportes y manual. Además recibe los permisos delegados configurados para <strong>Ayudante de Superadmin</strong>. El cambio se sincroniza en su siguiente solicitud.</div></div>
                <div class="sa-helper-permission-box">
                    <div class="sa-helper-permission-head"><strong><i class="fas fa-user-shield"></i> Acceso operativo que conserva</strong><span><?= number_format(count($permisos_admin)) ?> permisos base</span></div>
                    <?php if ($permisos_admin): ?><div class="sa-helper-permission-list is-base"><?php foreach ($permisos_admin as $permiso): ?><span title="<?= sa_e($permiso['clave_permiso']) ?>"><i class="fas fa-check"></i><?= sa_e($permiso['descripcion']) ?></span><?php endforeach; ?></div><?php endif; ?>
                </div>
                <div class="sa-helper-permission-box">
                    <div class="sa-helper-permission-head"><strong><i class="fas fa-key"></i> Permisos adicionales delegados</strong><a href="gestionar_roles.php">Editar en Roles y permisos</a></div>
                    <?php if ($permisos_ayudante): ?><div class="sa-helper-permission-list"><?php foreach ($permisos_ayudante as $permiso): ?><span title="<?= sa_e($permiso['clave_permiso']) ?>"><i class="fas fa-plus"></i><?= sa_e($permiso['descripcion']) ?></span><?php endforeach; ?></div><?php else: ?><div class="sa-alert sa-alert--warning"><i class="fas fa-triangle-exclamation"></i><div>El rol Ayudante todavía no tiene permisos adicionales asignados.</div></div><?php endif; ?>
                </div>
                <div class="sa-form-field"><label for="helperUser"><i class="fas fa-user"></i> Admin a promover</label><select name="id_usuario" id="helperUser" required><option value="">Seleccionar Admin</option><?php foreach ($usuarios_promovibles as $usuario): ?><option value="<?= (int) $usuario['id'] ?>"><?= sa_e($usuario['nombre_usuario'] . ' · ' . $usuario['correo']) ?></option><?php endforeach; ?></select><small>Solo se muestran usuarios que actualmente tienen el rol Admin.</small></div>
            </div>
            <footer class="af-modal-footer"><button type="button" class="af-btn af-btn-secondary" data-af-close>Cancelar</button><button type="submit" class="af-btn af-btn-primary"><i class="fas fa-user-plus"></i> Promover ayudante</button></footer>
        </form>
    </section>
</div>

<script>
document.addEventListener('DOMContentLoaded', () => {
    const list = new AfenixAdmin.UnifiedList({table:'#helperTable',search:'#helperSearch',perPage:'#helperPerPage',summary:'#helperPageSummary',pagination:'#helperPagination',empty:'#helperEmpty'});
    document.getElementById('clearHelperFilters')?.addEventListener('click', () => {document.getElementById('helperSearch').value='';document.getElementById('helperPerPage').value='100';list.currentPage=1;list.render();});

    const modal = new AfenixAdmin.ModalController('#helperModal');
    document.getElementById('openHelperModal')?.addEventListener('click', event => modal.open(event.currentTarget));
    document.getElementById('helperForm')?.addEventListener('submit', event => {
        if (!document.getElementById('helperUser').value) {
            event.preventDefault();
            Swal.fire('Atención', 'Selecciona un Admin para promover.', 'warning');
        }
    });

    document.querySelectorAll('.form-revocar').forEach(form => form.addEventListener('submit', event => {
        event.preventDefault();
        Swal.fire({title:'¿Revocar ayudante?',text:'Se restaurará el rol que tenía antes de ser promovido.',icon:'warning',showCancelButton:true,confirmButtonText:'Sí, revocar',cancelButtonText:'Cancelar',confirmButtonColor:'#dc2626'}).then(result => {if(result.isConfirmed) form.submit();});
    }));

    <?php if ($flash !== ''): ?>
    Swal.fire({icon:<?= json_encode($flash_status === 'success' ? 'success' : 'error') ?>,title:<?= json_encode($flash_status === 'success' ? 'Operación completada' : 'No se pudo completar') ?>,text:<?= json_encode($flash) ?>,confirmButtonColor:'#dc2626'});
    const cleanUrl = new URL(window.location.href);cleanUrl.searchParams.delete('status');cleanUrl.searchParams.delete('msg');window.history.replaceState({},'',cleanUrl);
    <?php endif; ?>
});
</script>
<?php require_once 'admin_footer.php'; ob_end_flush(); ?>

<!-- AFENIXX-V12-ASSETS -->
<link rel="stylesheet" href="../assets/css/afenixx_v12.css?v=2026.07.24-v12">
<script src="../assets/js/afenixx_v12.js?v=2026.07.24-v12"></script>
