<?php
// === LOG DE DEPURACIÓN ===
$logFile = __DIR__ . '/debug_jueces.txt';
$logData = "--- Petición Recibida Jueces (" . date('Y-m-d H:i:s') . ") ---\n";
$logData .= "POST Data (Normal): " . print_r($_POST, true) . "\n";

// Capturar posibles payloads JSON de solicitudes Fetch (JavaScript)
$jsonInput = file_get_contents('php://input');
$jsonData = json_decode($jsonInput, true);
if ($jsonData) {
    $logData .= "POST Data (JSON Raw): " . print_r($jsonData, true) . "\n";
}
file_put_contents($logFile, $logData, FILE_APPEND);

// Asegurar inicio de sesión
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// Inicializar e importar la clase de Base de Datos real
require_once __DIR__ . "/../../modelo/Db.php"; 

if (!isset($_SESSION['usu_id'])) {
    // Si la petición es AJAX/Fetch, responde con JSON, sino redirige
    if ((!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || $jsonData) {
        if (ob_get_length()) ob_clean();
        header('Content-Type: application/json');
        http_response_code(401);
        echo json_encode(["status" => "error", "message" => "Sesión no autorizada."]);
        exit();
    }
    header("Location: /stage/login.php");
    exit();
}

$bd = new clsbdd();

// Definimos de forma estática el rol_id para los jueces según la estructura de la base de datos
$ROL_JUEZ = 5;

// Mensajes de feedback para renderizado HTML
$mensaje = '';
$tipo_mensaje = '';

// Unificar los datos sin importar si vienen por formulario tradicional POST o JSON Raw (Fetch)
$datos = $_POST;
if ($jsonData) {
    $datos = array_merge($datos, $jsonData);
}

// ==========================================
// PROCESAMIENTO DE ACCIONES (POST / GET)
// ==========================================

// PROCESAR ELIMINACIÓN DE JUEZ (Optimizado para Fetch/AJAX)
if (isset($_GET['action']) && $_GET['action'] === 'eliminar_juez' && isset($_GET['usu_id'])) {
    $id_eliminar = intval($_GET['usu_id']);
    
    // Evita borrar por error a un administrador asegurando el rol_id
    $sql = "DELETE FROM bas_usuarios WHERE usu_id = {$id_eliminar} AND rol_id = {$ROL_JUEZ}";
    $res = $bd->ejecutar($sql);
    
    // Si la petición viene de JavaScript (Fetch), devolvemos JSON limpio y destruimos cualquier buffer
    if ((!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') || isset($_GET['async'])) {
        // BLINDAJE TOTAL: Eliminamos cualquier salida previa de texto o espacios en blanco accidentales
        while (ob_get_level()) {
            ob_end_clean();
        }
        
        header('Content-Type: application/json; charset=utf-8');
        if ($res) {
            echo json_encode(["status" => "success", "message" => "Juez eliminado correctamente del sistema."]);
        } else {
            http_response_code(400);
            echo json_encode(["status" => "error", "message" => "Error al intentar eliminar el juez seleccionado de la base de datos."]);
        }
        die(); // Evita que cualquier código posterior o layouts del framework se rendericen
    }
    
    if ($res) {
        $mensaje = "Juez eliminado correctamente del sistema.";
        $tipo_mensaje = "success";
    } else {
        $mensaje = "Error al intentar eliminar el juez seleccionado.";
        $tipo_mensaje = "danger";
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
    // 1. GUARDAR O ACTUALIZAR JUEZ (CON TIPO DE ESPECIALIDAD)
    if (isset($datos['action']) && $datos['action'] === 'save_juez') {
        $usu_id         = !empty($datos['usu_id']) ? intval($datos['usu_id']) : null;
        $usu_nombre     = trim($datos['usu_nombre'] ?? '');
        $usu_usuario    = trim($datos['usu_usuario'] ?? '');
        $usu_clave      = trim($datos['usu_clave'] ?? '');
        $usu_tipo_juez  = trim($datos['usu_tipo_juez'] ?? 'TECNICO'); 

        $nombre_esc  = $bd->esc($usu_nombre);
        $usuario_esc = $bd->esc($usu_usuario);
        $tipo_esc    = $bd->esc($usu_tipo_juez);

        $error_proceso = false;

        if (empty($usu_nombre) || empty($usu_usuario)) {
            $mensaje = "El nombre y el usuario del juez son campos obligatorios.";
            $tipo_mensaje = "danger";
            $error_proceso = true;
        } else {
            if ($usu_id) {
                // UPDATE
                $sql_pass = "";
                if (!empty($usu_clave)) {
                    $sql_pass = ", usu_clave = '{$usu_clave}'"; 
                }
                
                $sql = "UPDATE bas_usuarios SET 
                            usu_nombre = '{$nombre_esc}', 
                            usu_usuario = '{$usuario_esc}',
                            usu_tipo_juez = '{$tipo_esc}' 
                            {$sql_pass}
                        WHERE usu_id = {$usu_id} AND rol_id = {$ROL_JUEZ}";
                
                $res = $bd->ejecutar($sql);
                if ($res) {
                    $mensaje = "Datos y especialidad del juez actualizados correctamente.";
                    $tipo_mensaje = "success";
                } else {
                    $mensaje = "Error al actualizar los datos del juez.";
                    $tipo_mensaje = "danger";
                    $error_proceso = true;
                }
            } else {
                // INSERT
                if (empty($usu_clave)) {
                    $mensaje = "La contraseña es obligatoria para nuevos jueces.";
                    $tipo_mensaje = "danger";
                    $error_proceso = true;
                } else {
                    $sql_check = "SELECT usu_id FROM bas_usuarios WHERE usu_usuario = '{$usuario_esc}'";
                    $res_check = $bd->ejecutar($sql_check);
                    
                    if ($res_check && $res_check->num_rows > 0) {
                        $mensaje = "El nombre de usuario '{$usu_usuario}' ya se encuentra registrado.";
                        $tipo_mensaje = "danger";
                        $error_proceso = true;
                    } else {
                        $sql = "INSERT INTO bas_usuarios (usu_nombre, usu_usuario, usu_clave, rol_id, usu_estado, usu_tipo_juez) 
                                VALUES ('{$nombre_esc}', '{$usuario_esc}', '{$usu_clave}', {$ROL_JUEZ}, 1, '{$tipo_esc}')";
                        $res = $bd->ejecutar($sql);
                        if ($res) {
                            $mensaje = "Juez especialista registrado con éxito.";
                            $tipo_mensaje = "success";
                        } else {
                            $mensaje = "Error al registrar el juez.";
                            $tipo_mensaje = "danger";
                            $error_proceso = true;
                        }
                    }
                }
            }
        }

        if ($jsonData) {
            if (ob_get_length()) ob_clean();
            header('Content-Type: application/json');
            if ($error_proceso) {
                http_response_code(400);
                echo json_encode(["status" => "error", "message" => $mensaje]);
            } else {
                echo json_encode(["status" => "success", "message" => $mensaje]);
            }
            exit();
        }
    }

    // 2. PROCESAR ASIGNACIÓN DE JUECES A COMPETENCIA
    if (isset($datos['action']) && $datos['action'] === 'save_asignacion') {
        $evp_id = intval($datos['evp_id'] ?? 0);
        $error_proceso = false;
        
        if ($evp_id > 0) {
            $sql_delete = "DELETE FROM bas_jueces_eventos WHERE evp_id = {$evp_id}";
            $bd->ejecutar($sql_delete);

            if (isset($datos['jueces_seleccionados']) && is_array($datos['jueces_seleccionados'])) {
                $insert_values = [];
                foreach ($datos['jueces_seleccionados'] as $id_juez) {
                    $id_juez_int = intval($id_juez);
                    $insert_values[] = "({$evp_id}, {$id_juez_int})";
                }

                if (!empty($insert_values)) {
                    $sql_insert = "INSERT INTO bas_jueces_eventos (evp_id, usu_id) VALUES " . implode(', ', $insert_values);
                    $res_ins = $bd->ejecutar($sql_insert);
                    if ($res_ins) {
                        $mensaje = "Jueces asignados a la competencia de manera exitosa.";
                        $tipo_mensaje = "success";
                    } else {
                        $mensaje = "Ocurrió un error al guardar las asignaciones.";
                        $tipo_mensaje = "danger";
                        $error_proceso = true;
                    }
                }
            } else {
                $mensaje = "Se han removido todos los jueces asignados a este evento.";
                $tipo_mensaje = "warning";
            }
        } else {
            $mensaje = "ID de evento inválido.";
            $tipo_mensaje = "danger";
            $error_proceso = true;
        }

        if ($jsonData) {
            if (ob_get_length()) ob_clean();
            header('Content-Type: application/json');
            if ($error_proceso) {
                http_response_code(400);
                echo json_encode(["status" => "error", "message" => $mensaje]);
            } else {
                echo json_encode(["status" => "success", "message" => $mensaje]);
            }
            exit();
        }
    }
}
?>

<div class="row mb-4 align-items-center">
    <div class="col">
        <h2 class="h3 text-dark fw-bold mb-0">
            <i class="fas fa-gavel text-primary me-2"></i>Consola de Jueces y Evaluación
        </h2>
        <p class="text-muted small mb-0">Administra las credenciales de los jueces evaluadores, define su especialidad y configúralos por rúbrica de juzgamiento.</p>
    </div>
    <div class="col-auto">
        <button class="btn btn-primary rounded-pill shadow-sm fw-bold px-4" data-bs-toggle="modal" data-bs-target="#modalJuez" id="btnNuevoJuez">
            <i class="fas fa-plus me-2"></i>Registrar Juez
        </button>
    </div>
</div>

<?php if (!empty($mensaje)): ?>
    <div class="alert alert-<?= $tipo_mensaje ?> alert-dismissible fade show border-0 shadow-sm" role="alert">
        <i class="fas <?= $tipo_mensaje === 'success' ? 'fa-check-circle' : 'fa-exclamation-triangle' ?> me-2"></i>
        <?= htmlspecialchars($mensaje) ?>
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
    </div>
<?php endif; ?>

<div class="row g-4">
    <div class="col-lg-7">
        <div class="card border-0 shadow-sm rounded-4">
            <div class="card-header bg-transparent border-0 pt-4 px-4 pb-0">
                <h5 class="fw-bold text-dark mb-0"><i class="fas fa-users me-2 text-muted"></i>Panel de Evaluadores</h5>
            </div>
            <div class="card-body p-4">
                <div class="table-responsive">
                    <table class="table table-hover align-middle mb-0">
                        <thead class="table-light text-muted small fw-bold text-uppercase">
                            <tr>
                                <th>Nombre Completo</th>
                                <th>Rúbrica / Especialidad</th>
                                <th>Usuario Acceso</th>
                                <th class="text-center">Acciones</th>
                            </tr>
                        </thead>
                        <tbody class="small">
                            <?php
                            $sql = "SELECT * FROM bas_usuarios WHERE rol_id = {$ROL_JUEZ} ORDER BY usu_nombre ASC";
                            $res = $bd->ejecutar($sql);

                            if ($res && $res->num_rows > 0) {
                                while ($juez = $res->fetch_assoc()) {
                                    $tipo_juez = $juez['usu_tipo_juez'] ?? 'TECNICO';
                                    $badge_tipo = match($tipo_juez) {
                                        'TECNICO' => 'bg-primary-subtle text-primary border border-primary-subtle',
                                        'COREOGRAFICO' => 'bg-purple-subtle text-purple border border-purple-subtle',
                                        'PENALIDADES' => 'bg-danger-subtle text-danger border border-danger-subtle',
                                        default => 'bg-secondary-subtle text-secondary'
                                    };
                                    
                                    $style_purple = ($tipo_juez === 'COREOGRAFICO') ? 'style="background-color: #f3e5f5; color: #7b1fa2; border: 1px solid #e1bee7;"' : '';
                                    ?>
                                    <tr>
                                        <td>
                                            <span class="fw-bold text-dark d-block"><?= htmlspecialchars($juez['usu_nombre']) ?></span>
                                            <span class="badge bg-secondary-subtle text-secondary small">ID: <?= $juez['usu_id'] ?></span>
                                        </td>
                                        <td>
                                            <span class="badge rounded-pill px-2 py-1 text-uppercase fw-bold shadow-sm <?= $badge_tipo ?>" <?= $style_purple ?>>
                                                <i class="fas <?= $tipo_juez === 'PENALIDADES' ? 'fa-exclamation-circle' : ($tipo_juez === 'COREOGRAFICO' ? 'fa-palette' : 'fa-cogs') ?> me-1"></i>
                                                <?= htmlspecialchars($tipo_juez) ?>
                                            </span>
                                        </td>
                                        <td><code class="text-primary"><?= htmlspecialchars($juez['usu_usuario']) ?></code></td>
                                        <td class="text-center">
                                            <button class="btn btn-sm btn-outline-dark rounded-pill btn-editar-juez me-1" 
                                                    data-bs-toggle="modal"
                                                    data-bs-target="#modalJuez"
                                                    data-id="<?= $juez['usu_id'] ?>"
                                                    data-nombre="<?= htmlspecialchars($juez['usu_nombre'], ENT_QUOTES) ?>"
                                                    data-usuario="<?= htmlspecialchars($juez['usu_usuario'], ENT_QUOTES) ?>"
                                                    data-tipo="<?= htmlspecialchars($tipo_juez, ENT_QUOTES) ?>">
                                                <i class="fas fa-edit"></i>
                                            </button>
                                            <button type="button" 
                                                    class="btn btn-sm btn-outline-danger rounded-pill"
                                                    onclick="eliminarJuezAsincrono(<?= $juez['usu_id'] ?>, '<?= htmlspecialchars($juez['usu_nombre'], ENT_QUOTES) ?>', this);">
                                                <i class="fas fa-trash-alt"></i>
                                            </button>
                                        </td>
                                    </tr>
                                    <?php
                                }
                            } else {
                                echo "<tr><td colspan='4' class='text-center text-muted py-4'>No se han registrado jueces evaluadores.</td></tr>";
                            }
                            ?>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>

    <div class="col-lg-5">
        <div class="card border-0 shadow-sm rounded-4">
            <div class="card-header bg-transparent border-0 pt-4 px-4 pb-0">
                <h5 class="fw-bold text-dark mb-0"><i class="fas fa-calendar-alt text-muted me-2"></i>Asignación de Competencias</h5>
            </div>
            <div class="card-body p-4">
                <p class="text-muted small">Selecciona una de tus competencias internas organizadas por Stage para configurar qué jueces tendrán permitido evaluarla.</p>
                
                <div class="list-group list-group-flush">
                    <?php
                    $sql_eventos = "SELECT * FROM bas_eventos_propios ORDER BY evp_fecha DESC";
                    $res_eventos = $bd->ejecutar($sql_eventos);

                    if ($res_eventos && $res_eventos->num_rows > 0) {
                        while ($ev = $res_eventos->fetch_assoc()) {
                            $sql_count = "SELECT COUNT(*) as total FROM bas_jueces_eventos WHERE evp_id = {$ev['evp_id']}";
                            $res_count = $bd->ejecutar($sql_count);
                            $count_data = $res_count->fetch_assoc();
                            $jueces_actuales = $count_data['total'];

                            $fase = $ev['evp_fase_actual'] ?? '';
                            $badge_clase = match($fase) {
                                'REGISTRO' => 'bg-info',
                                'CONGRESILLO' => 'bg-warning text-dark',
                                'COMPETENCIA' => 'bg-success',
                                'FINALIZADO' => 'bg-dark',
                                default => 'bg-secondary'
                            };
                            ?>
                            <div class="list-group-item d-flex justify-content-between align-items-center px-0 py-3 border-bottom">
                                <div>
                                    <h6 class="mb-1 fw-bold text-dark text-uppercase"><?= htmlspecialchars($ev['evp_nombre']) ?></h6>
                                    <span class="badge <?= $badge_clase ?> small p-1 mb-1"><?= htmlspecialchars($fase) ?></span>
                                    <small class="text-muted d-block">Jueces calificados: <strong class="text-primary"><?= $jueces_actuales ?></strong></small>
                                </div>
                                <button class="btn btn-sm btn-primary rounded-pill btn-asignar-jueces"
                                        data-bs-toggle="modal"
                                        data-bs-target="#modalAsignar"
                                        data-evp-id="<?= $ev['evp_id'] ?>"
                                        data-evp-nombre="<?= htmlspecialchars($ev['evp_nombre'], ENT_QUOTES) ?>">
                                    <i class="fas fa-link me-1"></i> Asignar
                                </button>
                            </div>
                            <?php
                        }
                    } else {
                        echo "<div class='text-center text-muted py-4'>No existen eventos propios creados en el sistema.</div>";
                    }
                    ?>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- MODAL REGISTRO/EDICIÓN -->
<div class="modal fade" id="modalJuez" data-bs-backdrop="static" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered">
        <div class="modal-content border-0 shadow rounded-4">
            <div class="modal-header bg-dark text-white border-0 py-3">
                <h5 class="modal-title fw-bold small text-uppercase" id="tituloModalJuez">
                    <i class="fas fa-user-plus text-warning me-2"></i>Registrar Nuevo Juez
                </h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>
            <form id="formJuez" method="POST" action="">
                <div class="modal-body p-4">
                    <input type="hidden" name="action" value="save_juez">
                    <input type="hidden" name="usu_id" id="usu_id">

                    <div class="mb-3">
                        <label class="form-label text-muted small fw-bold">Nombre Completo *</label>
                        <input type="text" class="form-control bg-light" name="usu_nombre" id="usu_nombre" required placeholder="Ej: Dra. María Augusta Cabrera">
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label text-muted small fw-bold">Rúbrica / Especialidad Evaluadora *</label>
                        <select class="form-select bg-light fw-bold text-dark" name="usu_tipo_juez" id="usu_tipo_juez" required>
                            <option value="TECNICO">JUEZ TÉCNICO (Dificultad, Giros, Saltos, Manejo)</option>
                            <option value="COREOGRAFICO">JUEZ COREOGRÁFICO (Efectos visuales, Sincronismo, Expresión)</option>
                            <option value="PENALIDADES">JUEZ DE PENALIDADES (Caídas de bastón, Salidas de pista, Tiempo)</option>
                        </select>
                        <small class="text-muted d-block mt-1">Esto filtrará automáticamente los campos de puntuación en su panel móvil.</small>
                    </div>

                    <div class="mb-3">
                        <label class="form-label text-muted small fw-bold">Nombre de Usuario (Login) *</label>
                        <input type="text" class="form-control bg-light" name="usu_usuario" id="usu_usuario" required placeholder="Ej: mcabrera.juez">
                    </div>
                    <div class="mb-1">
                        <label class="form-label text-muted small fw-bold" id="lblClave">Contraseña de Acceso *</label>
                        <input type="password" class="form-control bg-light" name="usu_clave" id="usu_clave" placeholder="Asigna una contraseña segura">
                        <small class="text-muted d-block mt-1" id="ayudaClave">La contraseña es obligatoria para nuevos registros.</small>
                    </div>
                </div>
                <div class="modal-footer border-0 p-4 pt-0">
                    <button type="button" class="btn btn-light rounded-pill px-4" data-bs-dismiss="modal">Cerrar</button>
                    <button type="submit" class="btn btn-primary rounded-pill px-4 shadow-sm fw-bold">Guardar Juez</button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- Modal de Asignación -->
<div class="modal fade" id="modalAsignar" data-bs-backdrop="static" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered">
        <div class="modal-content border-0 shadow rounded-4">
            <div class="modal-header bg-primary text-white border-0 py-3">
                <h5 class="modal-title fw-bold small text-uppercase">
                    <i class="fas fa-check-double text-warning me-2"></i>Asignar Jueces Calificadores
                </h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>
            <form id="formAsignacion" method="POST" action="">
                <div class="modal-body p-4">
                    <input type="hidden" name="action" value="save_asignacion">
                    <input type="hidden" name="evp_id" id="asignar_evp_id">

                    <div class="bg-light p-3 rounded-3 mb-3 border">
                        <span class="text-muted small d-block">Competencia Seleccionada:</span>
                        <strong class="text-dark text-uppercase fs-6" id="labelCompetencia">Cargando...</strong>
                    </div>

                    <label class="form-label text-muted small fw-bold mb-2">Selecciona los Jueces Calificadores habilitados:</label>
                    <div id="contenedorJuecesAsignar" style="max-height: 250px; overflow-y: auto;" class="p-1">
                    </div>
                </div>
                <div class="modal-footer border-0 p-4 pt-0">
                    <button type="button" class="btn btn-light rounded-pill px-4" data-bs-dismiss="modal">Cancelar</button>
                    <button type="submit" class="btn btn-primary rounded-pill px-4 shadow-sm fw-bold">Aplicar Asignaciones</button>
                </div>
            </form>
        </div>
    </div>
</div>

<?php
$jueces_json = [];
$res_js = $bd->ejecutar("SELECT usu_id, usu_nombre, usu_tipo_juez FROM bas_usuarios WHERE rol_id = {$ROL_JUEZ} ORDER BY usu_nombre ASC");
if ($res_js && $res_js->num_rows > 0) {
    while($j = $res_js->fetch_assoc()) {
        $jueces_json[] = $j;
    }
}
?>

<script>
let JUECES_SISTEMA = <?= json_encode($jueces_json) ?>;

document.addEventListener('DOMContentLoaded', function() {
    
    document.querySelectorAll('.btn-editar-juez').forEach(boton => {
        boton.addEventListener('click', function() {
            document.getElementById('tituloModalJuez').innerHTML = '<i class="fas fa-edit text-warning me-2"></i>Modificar Juez';
            document.getElementById('usu_id').value = this.dataset.id;
            document.getElementById('usu_nombre').value = this.dataset.nombre;
            document.getElementById('usu_usuario').value = this.dataset.usuario;
            document.getElementById('usu_tipo_juez').value = this.dataset.tipo || 'TECNICO';
            document.getElementById('usu_clave').value = ''; 
            document.getElementById('lblClave').textContent = "Nueva Contraseña (Opcional)";
            document.getElementById('ayudaClave').textContent = "Dejar en blanco si desea conservar la contraseña actual.";
        });
    });

    const btnNuevoJuez = document.getElementById('btnNuevoJuez');
    if (btnNuevoJuez) {
        btnNuevoJuez.addEventListener('click', function() {
            document.getElementById('formJuez').reset();
            document.getElementById('usu_id').value = '';
            document.getElementById('usu_tipo_juez').value = 'TECNICO';
            document.getElementById('tituloModalJuez').innerHTML = '<i class="fas fa-user-plus text-warning me-2"></i>Registrar Nuevo Juez';
            document.getElementById('lblClave').textContent = "Contraseña de Acceso *";
            document.getElementById('ayudaClave').textContent = "La contraseña es obligatoria para nuevos registros.";
        });
    }

    document.querySelectorAll('.btn-asignar-jueces').forEach(boton => {
        boton.addEventListener('click', function() {
            const evp_id = this.dataset.evpId;
            const evp_nombre = this.dataset.evpNombre;

            document.getElementById('asignar_evp_id').value = evp_id;
            document.getElementById('labelCompetencia').textContent = evp_nombre;

            const contenedor = document.getElementById('contenedorJuecesAsignar');
            contenedor.innerHTML = '';

            if (JUECES_SISTEMA.length === 0) {
                contenedor.innerHTML = '<p class="text-muted small">No hay jueces registrados en el sistema actualmente.</p>';
                return;
            }

            fetch(`/stage/vista/eventos_propios/get_jueces_asignados.php?evp_id=${evp_id}`)
                .then(response => response.json())
                .then(asignados => {
                    JUECES_SISTEMA.forEach(juez => {
                        const isChecked = asignados.includes(parseInt(juez.usu_id)) ? 'checked' : '';
                        const tipoTxt = juez.usu_tipo_juez || 'TECNICO';
                        
                        const div = document.createElement('div');
                        div.className = "form-check mb-2 p-2 bg-light rounded border-start border-primary border-3";
                        div.innerHTML = `
                            <input class="form-check-input ms-1 me-2" type="checkbox" name="jueces_seleccionados[]" value="${juez.usu_id}" id="j_check_${juez.usu_id}" ${isChecked}>
                            <label class="form-check-label fw-bold text-dark d-flex justify-content-between align-items-center w-100 pe-2" style="cursor:pointer;" for="j_check_${juez.usu_id}">
                                <span>${juez.usu_nombre}</span>
                                <small class="text-muted border px-1 rounded bg-white text-uppercase" style="font-size:9px;">${tipoTxt}</small>
                            </label>
                        `;
                        contenedor.appendChild(div);
                    });
                })
                .catch(err => {
                    console.error("Error al recuperar asignaciones:", err);
                    contenedor.innerHTML = '<p class="text-danger small">Error al conectar con el servidor.</p>';
                });
        });
    });
});

function eliminarJuezAsincrono(usu_id, nombreJuez, boton) {
    if (!confirm(`¿Eliminar de forma definitiva al Juez "${nombreJuez}"? Se perderán sus asignaciones.`)) {
        return;
    }

    const urlLimpia = window.location.href.split('&')[0]; 
    const urlDestino = `${urlLimpia}${urlLimpia.includes('?') ? '&' : '?'}action=eliminar_juez&usu_id=${usu_id}&async=1`;
    
    fetch(urlDestino, {
        method: 'GET',
        headers: {
            'X-Requested-With': 'XMLHttpRequest'
        }
    })
    .then(res => {
        if (!res.ok) {
            return res.text().then(text => { throw new Error(text || 'Error en el servidor') });
        }
        return res.text(); 
    })
    .then(text => {
        try {
            const data = json_parse_limpio(text);
            if (data.status === 'success') {
                
                // =======================================================
                // SOLUCIÓN: Remover el juez de la variable global en JS
                // =======================================================
                if (typeof JUECES_SISTEMA !== 'undefined') {
                    // Filtramos el array para conservar solo los jueces que NO tengan el ID eliminado
                    JUECES_SISTEMA = JUECES_SISTEMA.filter(juez => parseInt(juez.usu_id) !== parseInt(usu_id));
                }

                const fila = boton.closest('tr');
                
                // Animación fluida de salida
                fila.style.transition = "all 0.4s cubic-bezier(0.4, 0, 0.2, 1)";
                fila.style.transform = "translateX(50px)";
                fila.style.opacity = "0";
                
                setTimeout(() => {
                    fila.remove();
                    // Valida si la tabla se quedó sin filas para actualizar la vista dinámicamente
                    const filasRestantes = document.querySelectorAll('tbody tr');
                    if(filasRestantes.length === 0) {
                        window.location.reload();
                    }
                }, 400);
            } else {
                alert(data.message || "No se pudo eliminar el juez.");
            }
        } catch (e) {
            console.warn("Respuesta parcial interceptada:", text);
            
            // Si entra por el catch pero sabemos que se borró, también limpiamos la variable global
            if (typeof JUECES_SISTEMA !== 'undefined') {
                JUECES_SISTEMA = JUECES_SISTEMA.filter(juez => parseInt(juez.usu_id) !== parseInt(usu_id));
            }

            const fila = boton.closest('tr');
            if (fila) {
                fila.remove();
                const filasRestantes = document.querySelectorAll('tbody tr');
                if(filasRestantes.length === 0) {
                    window.location.reload();
                }
            }
        }
    })
    .catch(err => {
        console.error("Error crítico en la comunicación Fetch:", err);
        alert("Ocurrió un error al intentar conectarse con el módulo de base de datos.");
    });
}

function json_parse_limpio(cadena) {
    const inicioJSON = cadena.indexOf('{');
    const finJSON = cadena.lastIndexOf('}');
    if (inicioJSON !== -1 && finJSON !== -1) {
        const JSON_puro = cadena.substring(inicioJSON, finJSON + 1);
        return JSON.parse(JSON_puro);
    }
    return JSON.parse(cadena);
}
</script>