<?php
// === LOG DE DEPURACIÓN RÁPIDA ===
$logFile = __DIR__ . '/debug_calificacion.txt';
$logData = "--- Petición Recibida (" . date('Y-m-d H:i:s') . ") ---\n";
$logData .= "Action: " . ($_GET['action'] ?? 'NINGUNA') . "\n";
$logData .= "POST Data: " . print_r($_POST, true) . "\n";
file_put_contents($logFile, $logData, FILE_APPEND);

if (!isset($_SESSION['usu_id'])) {
    header("Location: /stage/login.php");
    exit();
}
$bd = new clsbdd();

// 1. Pre-cargar Niveles/Clasificaciones (Soportando la tabla real bas_clasificaciones)
$niveles_activos = [];
$resNiv = $bd->ejecutar("SELECT cla_id, cla_categoria, cla_nivel FROM bas_clasificaciones WHERE cla_estado = 1 ORDER BY cla_categoria ASC");
if ($resNiv) {
    while ($n = $resNiv->fetch_assoc()) {
        $niveles_activos[] = $n;
    }
}

// 2. Pre-cargar Academias Invitadas
$academias_invitadas = [];
$resAca = $bd->ejecutar("SELECT aca_nombre FROM bas_academias_invitadas ORDER BY aca_nombre ASC");
if ($resAca) {
    while ($a = $resAca->fetch_assoc()) {
        $academias_invitadas[] = $a['aca_nombre'];
    }
}

// 3. Pre-cargar Alumnas / Bastoneras de la Academia de casa (Uniendo nombres y apellidos)
// 3. Pre-cargar Alumnas / Bastoneras de la Academia de casa (Trayendo también el cla_id)
$bastoneras_casa = [];
$resBas = $bd->ejecutar("SELECT bas_id, cla_id, CONCAT(bas_nombres, ' ', bas_apellidos) AS bas_nombres FROM bas_bastoneras WHERE bas_estado = 1 ORDER BY bas_nombres ASC");
if ($resBas) {
    while ($b = $resBas->fetch_assoc()) {
        $bastoneras_casa[] = $b;
    }
}
?>

<div class="row mb-4 align-items-center">
    <div class="col">
        <h2 class="h3 text-dark fw-bold mb-0">
            <i class="fas fa-handshake text-primary me-2"></i>Festivales y Campeonatos StageDance (Anfitrión)
        </h2>
        <p class="text-muted small mb-0">Panel de control logístico para eventos organizados por la academia, cobros externos y escaleta de jueces.</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="#modalEventoPropio" id="btnNuevoEvento">
            <i class="fas fa-plus me-2"></i>Crear Nuevo Festival
        </button>
    </div>
</div>

<div class="card border-0 shadow-sm rounded-4 mb-4">
    <div class="card-body p-4">
        <div class="table-responsive">
            <table class="table table-hover align-middle mb-0" id="tablaEventosPropios">
                <thead class="table-light text-muted small fw-bold text-uppercase">
                    <tr>
                        <th>Nombre del Festival / Evento</th>
                        <th>Tipo Competencia</th>
                        <th>Fecha</th>
                        <th>Lugar / Sede</th>
                        <th>Fase Actual</th>
                        <th>Estado</th>
                        <th class="text-center">Acciones</th>
                    </tr>
                </thead>
                <tbody class="small">
                    <?php
                    $sql = "SELECT * FROM bas_eventos_propios ORDER BY evp_fecha DESC";
                    $res = $bd->ejecutar($sql);

                    if ($res && $res->num_rows > 0) {
                        while ($row = $res->fetch_assoc()) {
                            $color_estado = match($row['evp_estado']) {
                                'PLANIFICACION' => 'bg-info-subtle text-info border-info-subtle',
                                'EN_CURSO' => 'bg-warning-subtle text-warning border-warning-subtle',
                                'CONCLUIDO' => 'bg-success-subtle text-success border-success-subtle',
                                'CANCELADO' => 'bg-danger-subtle text-danger border-danger-subtle',
                                default => 'bg-secondary-subtle text-secondary'
                            };

                            $color_fase = match($row['evp_fase_actual'] ?? 'REGISTRO') {
                                'REGISTRO' => 'badge bg-primary px-3 py-1',
                                'CONGRESILLO' => 'badge bg-warning text-dark px-3 py-1',
                                'COMPETENCIA' => 'badge bg-danger px-3 py-1',
                                'FINALIZADO' => 'badge bg-success px-3 py-1',
                                default => 'badge bg-secondary px-3 py-1'
                            };

                            $tipo_badge = ($row['evp_tipo_competencia'] ?? 'EXTERNA') === 'INTERNA' 
                                ? '<span class="badge text-purple border border-purple-subtle" style="color: #6f42c1; background-color: #f1eafc;">INTERNA</span>' 
                                : '<span class="badge bg-primary-subtle text-primary border border-primary-subtle">EXTERNA</span>';

                            echo "<tr>";
                            echo "<td><span class='fw-bold text-dark'>" . htmlspecialchars($row['evp_nombre']) . "</span></td>";
                            echo "<td>" . $tipo_badge . "</td>";
                            echo "<td>" . date('d/m/Y', strtotime($row['evp_fecha'])) . "</td>";
                            echo "<td>" . htmlspecialchars($row['evp_lugar']) . "</td>";
                            echo "<td><span class='" . $color_fase . "'>" . htmlspecialchars($row['evp_fase_actual'] ?? 'REGISTRO') . "</span></td>";
                            echo "<td><span class='badge rounded-pill px-3 py-1 border " . $color_estado . "'>" . htmlspecialchars($row['evp_estado']) . "</span></td>";
                            echo "<td class='text-center'>
                                    <button class='btn btn-sm btn-outline-primary rounded-pill btn-editar-evp' 
                                            data-bs-toggle='modal'
                                            data-bs-target='#modalEventoPropio'
                                            data-id='".$row['evp_id']."' 
                                            data-nombre='".htmlspecialchars($row['evp_nombre'], ENT_QUOTES)."'
                                            data-tipo='".htmlspecialchars($row['evp_tipo_competencia'] ?? 'EXTERNA', ENT_QUOTES)."'
                                            data-fecha='".$row['evp_fecha']."'
                                            data-congresillo='".($row['evp_fecha_congresillo'] ? date('Y-m-d\TH:i', strtotime($row['evp_fecha_congresillo'])) : '')."'
                                            data-limite='".($row['evp_fecha_limite_registro'] ? date('Y-m-d\TH:i', strtotime($row['evp_fecha_limite_registro'])) : '')."'
                                            data-fase='".htmlspecialchars($row['evp_fase_actual'] ?? 'REGISTRO', ENT_QUOTES)."'
                                            data-lugar='".htmlspecialchars($row['evp_lugar'] ?? '', ENT_QUOTES)."'
                                            data-entrada='".$row['evp_costo_entrada_publico']."'
                                            data-inscripcion='".$row['evp_costo_inscripcion_bastonera']."'
                                            data-estado='".htmlspecialchars($row['evp_estado'], ENT_QUOTES)."'
                                            data-token='".htmlspecialchars($row['evp_token_registro'] ?? '', ENT_QUOTES)."'
                                            data-obs='".htmlspecialchars($row['evp_observaciones'] ?? '', ENT_QUOTES)."'>
                                        <i class='fas fa-cog me-1'></i> Gestionar
                                    </button>
                                  </td>";
                            echo "</tr>";
                        }
                    } else {
                        echo "<tr><td colspan='7' class='text-center text-muted py-4'>No hay festivales registrados.</td></tr>";
                    }
                    ?>
                </tbody>
            </table>
        </div>
    </div>
</div>

<div class="modal fade" id="modalEventoPropio" data-bs-backdrop="static" tabindex="-1" aria-hidden="true">
    <div class="modal-dialog modal-xl modal-dialog-centered">
        <div class="modal-content border-0 shadow rounded-4">
            <div class="modal-header bg-dark text-white border-0 py-3 rounded-top-4">
                <h5 class="modal-title fw-bold small text-uppercase">
                    <i class="fas fa-sliders-h text-warning me-2"></i>Consola Central de Evento Anfitrión
                </h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>

            <ul class="nav nav-tabs bg-light px-4 pt-2 border-bottom" id="eventoTabs" role="tablist">
                <li class="nav-item">
                    <button class="nav-link active small fw-bold text-uppercase py-2" id="logistica-tab" data-bs-toggle="tab" data-bs-target="#tab-logistica" type="button" role="tab">1. Logística y Costos</button>
                </li>
                <li class="nav-item">
                    <button class="nav-link small fw-bold text-uppercase py-2" id="inscripciones-tab" data-bs-toggle="tab" data-bs-target="#tab-inscripciones" type="button" role="tab">2. Inscripción / Ficha</button>
                </li>
                <li class="nav-item">
                    <button class="nav-link small fw-bold text-uppercase py-2" id="escaleta-tab" data-bs-toggle="tab" data-bs-target="#tab-escaleta" type="button" role="tab">3. Mesa Técnico (Jueces)</button>
                </li>
            </ul>

            <form id="formEventoPropio" method="POST" action="/stage/controlador/EventoPropioController.php?action=guardar">
                <div class="modal-body p-4 tab-content">
                    <input type="hidden" name="evp_id" id="evp_id">

                    <div class="tab-pane fade show active" id="tab-logistica" role="tabpanel">
                        <div class="row g-3">
                            <div class="col-md-8">
                                <label class="form-label text-muted small fw-bold">Nombre de la Competencia / Festival Anfitrión *</label>
                                <input type="text" class="form-control bg-light text-uppercase" name="evp_nombre" id="evp_nombre" placeholder="Ej: I COPA INTERNA STAGE DANCE CORP" required>
                            </div>
                            <div class="col-md-4">
                                <label class="form-label text-primary small fw-bold">Tipo de Competencia *</label>
                                <select class="form-select bg-primary-subtle fw-bold text-primary" name="evp_tipo_competencia" id="evp_tipo_competencia" onchange="evaluarFlujoEvento(this.value)">
                                    <option value="EXTERNA">EXTERNA (Academias Invitadas + Links)</option>
                                    <option value="INTERNA">INTERNA (Solo Elencos / Alumnas Propias)</option>
                                </select>
                            </div>
                            <div class="col-md-4">
                                <label class="form-label text-muted small fw-bold">Fecha programada *</label>
                                <input type="date" class="form-control bg-light" name="evp_fecha" id="evp_fecha" required>
                            </div>
                            <div class="col-md-4">
                                <label class="form-label text-muted small fw-bold">Fase Actual del Festival</label>
                                <select class="form-select bg-light fw-bold" name="evp_fase_actual" id="evp_fase_actual">
                                    <option value="REGISTRO">REGISTRO / POSTULACIONES</option>
                                    <option value="CONGRESILLO">CONGRESILLO / SORTEO</option>
                                    <option value="COMPETENCIA">COMPETENCIA / EN VIVO</option>
                                    <option value="FINALIZADO">FINALIZADO</option>
                                </select>
                            </div>
                            <div class="col-md-4">
                                <label class="form-label text-muted small fw-bold">Estado del Evento</label>
                                <select class="form-select bg-light fw-bold" name="evp_estado" id="evp_estado">
                                    <option value="PLANIFICACION">EN PLANIFICACIÓN</option>
                                    <option value="EN_CURSO">¡EN VIVO / EN CURSO!</option>
                                    <option value="CONCLUIDO">CONCLUIDO / FINALIZADO</option>
                                    <option value="CANCELADO">CANCELADO</option>
                                </select>
                            </div>
                            <div class="col-12">
                                <label class="form-label text-muted small fw-bold">Lugar / Sede / Coliseo Arrendado *</label>
                                <input type="text" class="form-control bg-light text-uppercase" name="evp_lugar" id="evp_lugar" placeholder="Ej: COLISEO DE LA ACADEMIA STAGE DANCE" required>
                            </div>

                            <div id="seccionFasesExternas" class="col-12 row g-3 px-0 mx-0 border-top pt-3 mt-2">
                                <div class="col-12">
                                    <span class="badge bg-primary mb-1">Fases Obligatorias (Flujo Externo)</span>
                                </div>
                                <div class="col-md-4">
                                    <label class="form-label text-muted small fw-bold"><i class="fas fa-link me-1"></i> Link Público para Postulaciones</label>
                                    <div class="input-group input-group-sm">
                                        <input type="text" class="form-control bg-white text-muted" id="evp_link_inscripcion" readonly placeholder="Se generará un token único">
                                        <button class="btn btn-outline-primary" type="button" onclick="copiarLinkPostulacion()"><i class="fas fa-copy"></i></button>
                                    </div>
                                </div>
                                <div class="col-md-4">
                                    <label class="form-label text-muted small fw-bold"><i class="fas fa-calendar-alt me-1"></i> Fecha Congresillo Técnico</label>
                                    <input type="datetime-local" class="form-control form-control-sm" name="evp_fecha_congresillo" id="evp_fecha_congresillo">
                                </div>
                                <div class="col-md-4">
                                    <label class="form-label text-muted small fw-bold"><i class="fas fa-hourglass-end me-1"></i> Límite de Registro Público</label>
                                    <input type="datetime-local" class="form-control form-control-sm" name="evp_fecha_limite_registro" id="evp_fecha_limite_registro">
                                </div>
                                <div class="col-md-6">
                                    <label class="form-label text-muted small fw-bold">Precio Entrada Público ($)</label>
                                    <input type="number" step="0.01" class="form-control bg-light" name="evp_costo_entrada_publico" id="evp_costo_entrada_publico" value="0.00">
                                </div>
                                <div class="col-md-6">
                                    <label class="form-label text-muted small fw-bold">Costo Inscripción por Equipo Externo ($)</label>
                                    <input type="number" step="0.01" class="form-control bg-light text-success fw-bold" name="evp_costo_inscripcion_bastonera" id="evp_costo_inscripcion_bastonera" value="0.00">
                                </div>
                            </div>

                            <div class="col-12 border-top pt-2">
                                <label class="form-label text-muted small fw-bold">Notas de Organización Interna</label>
                                <textarea class="form-control bg-light" name="evp_observaciones" id="evp_observaciones" rows="3" placeholder="Detalles de logística, viáticos de jueces externos, premiación, etc..."></textarea>
                            </div>
                        </div>
                    </div>

                    <div class="tab-pane fade" id="tab-inscripciones" role="tabpanel">
                        <div class="row g-3">
                            <div class="col-md-5 border-end pe-3" id="columnaRegistroInscrito">
                            </div>
                             
                            <div class="col-md-7 ps-3">
                                <h6 class="fw-bold text-dark small mb-3"><i class="fas fa-list-ol me-1 text-secondary"></i> Historial de Equipos e Inscritos</h6>
                                <div id="divListaInscritos" class="table-responsive small">
                                    <p class="text-muted text-center py-3">Selecciona un festival existente para cargar sus equipos.</p>
                                </div>
                            </div>
                        </div>
                    </div>

                    <div class="tab-pane fade" id="tab-escaleta" role="tabpanel">
                        <div class="d-flex justify-content-between align-items-center mb-3 p-3 bg-light rounded-3 border">
                            <div>
                                <h6 class="fw-bold mb-1"><i class="fas fa-random text-purple"></i> Sorteo Aleatorio de Escaleta</h6>
                                <p class="text-muted small mb-0">Mezcla al azar el orden de salida de todos los participantes inscritos agrupados por sus categorías.</p>
                            </div>
                            <button type="button" class="btn btn-purple text-white fw-bold rounded-pill px-4" style="background-color: #6f42c1;" onclick="ejecutarSorteoAleatorio()">
                                <i class="fas fa-dice me-2"></i> Iniciar Sorteo
                            </button>
                        </div>
                    
                        <div id="contenedorEscaleta">
                            <p class="text-center text-muted small py-4">Guarda o gestiona un evento para habilitar la escaleta en tiempo real.</p>
                        </div>
                    </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 Panel</button>
                    <button type="submit" class="btn btn-primary rounded-pill px-4 shadow-sm fw-bold">Guardar Configuración Base</button>
                </div>
            </form>
        </div>
    </div>
</div>

<script>
// Arreglos seguros compartidos desde PHP
const arrayNivelesConfig = <?php echo json_encode($niveles_activos); ?>;
const arrayAcademiasConfig = <?php echo json_encode($academias_invitadas); ?>;
const arrayBastonerasCasa = <?php echo json_encode($bastoneras_casa); ?>;

document.addEventListener('DOMContentLoaded', function() {
    const tabla = document.getElementById('tablaEventosPropios');
    if (tabla) {
        tabla.addEventListener('click', function(e) {
            const boton = e.target.closest('.btn-editar-evp');
            if (!boton) return;
             
            const tabEl = document.getElementById('logistica-tab');
            if(tabEl) {
                const firstTab = bootstrap.Tab.getInstance(tabEl) || new bootstrap.Tab(tabEl);
                firstTab.show();
            }

            const evp_id = boton.getAttribute('data-id');
            const tipoCompetencia = boton.getAttribute('data-tipo') || 'EXTERNA';
            const token = boton.getAttribute('data-token') || '';

            document.getElementById('evp_id').value = evp_id;
            document.getElementById('evp_nombre').value = boton.getAttribute('data-nombre');
            document.getElementById('evp_tipo_competencia').value = tipoCompetencia;
            document.getElementById('evp_fecha').value = boton.getAttribute('data-fecha');
            document.getElementById('evp_fecha_congresillo').value = boton.getAttribute('data-congresillo');
            document.getElementById('evp_fecha_limite_registro').value = boton.getAttribute('data-limite');
            document.getElementById('evp_fase_actual').value = boton.getAttribute('data-fase');
            document.getElementById('evp_lugar').value = boton.getAttribute('data-lugar');
            document.getElementById('evp_costo_entrada_publico').value = boton.getAttribute('data-entrada');
            document.getElementById('evp_costo_inscripcion_bastonera').value = boton.getAttribute('data-inscripcion');
            document.getElementById('evp_estado').value = boton.getAttribute('data-estado');
            document.getElementById('evp_observaciones').value = boton.getAttribute('data-obs');

            if(document.getElementById('evp_link_inscripcion') && token !== '') {
                document.getElementById('evp_link_inscripcion').value = window.location.origin + '/stage/postular_bastonera.php?token=' + token;
            } else {
                document.getElementById('evp_link_inscripcion').value = 'No disponible (Guarda el evento)';
            }

            evaluarFlujoEvento(tipoCompetencia);

            document.getElementById('contenedorEscaleta').innerHTML = '<p class="small mb-0 text-muted py-4 text-center"><i class="fas fa-spinner fa-spin me-2"></i>Sincronizando mesa...</p>';
            cargarEscaletaYInscritos(evp_id);
        });
    }

    const btnNuevo = document.getElementById('btnNuevoEvento');
    if(btnNuevo) {
        btnNuevo.addEventListener('click', function() {
            document.getElementById('formEventoPropio').reset();
            document.getElementById('evp_id').value = '';
            document.getElementById('evp_link_inscripcion').value = 'Se generará un token único';
            evaluarFlujoEvento('EXTERNA'); 
             
            document.getElementById('contenedorEscaleta').innerHTML = '<p class="small mb-0 text-muted py-4">Guarda el evento primero para habilitar la escaleta.</p>';
            document.getElementById('divListaInscritos').innerHTML = '<p class="text-muted text-center py-3">Guarda el evento primero para habilitar inscripciones.</p>';
             
            const tabEl = document.getElementById('logistica-tab');
            if(tabEl) {
                const firstTab = bootstrap.Tab.getInstance(tabEl) || new bootstrap.Tab(tabEl);
                firstTab.show();
            }
        });
    }
});

function evaluarFlujoEvento(tipo) {
    const seccionFases = document.getElementById('seccionFasesExternas');
    const colRegistro = document.getElementById('columnaRegistroInscrito');

    if (tipo === 'INTERNA') {
        if(seccionFases) seccionFases.style.display = 'none';
         
        // Generar las opciones para las categorías
        let opcionesNiveles = '<option value="">-- Seleccionar Categoría Oficial --</option>';
        arrayNivelesConfig.forEach(n => {
            const id = n.cla_id || n.CLA_ID;
            const categoria = n.cla_categoria || n.CLA_CATEGORIA;
            const nivel = n.cla_nivel || n.CLA_NIVEL || '';
            
            if (id && categoria) {
                opcionesNiveles += `<option value="${id}">${categoria.toUpperCase()} ${nivel ? '(' + nivel + ')' : ''}</option>`;
            }
        });

        colRegistro.innerHTML = `
            <h6 class="fw-bold text-purple small mb-2" style="color: #6f42c1;"><i class="fas fa-trophy me-1"></i> Ficha Copa Interna Stage Dance</h6>
            <div class="alert alert-info py-2 small mb-2" style="font-size:11px;">Elige la categoría, la modalidad de participación y selecciona las deportistas correspondientes.</div>
             
            <div class="mb-2">
                <label class="small text-muted fw-bold">1. Categoría y Nivel de Juzgamiento *</label>
                <select class="form-select form-select-sm text-uppercase fw-bold text-dark" id="int_cla_id" onchange="actualizarFiltroBastoneras()">
                    ${opcionesNiveles}
                </select>
            </div>

            <div class="mb-2">
                <label class="small text-muted fw-bold">2. Modalidad Interna *</label>
                <select class="form-select form-select-sm fw-bold text-dark" id="int_modalidad" onchange="actualizarFiltroBastoneras()">
                    <option value="SOLISTAS">&#128100; SOLISTAS</option>
                    <option value="DÚOS">&#128111; DÚOS</option>
                    <option value="TRÍOS">&#128111;&#128065; TRÍOS</option>
                    <option value="CUARTETOS">&#128111;&#128066; CUARTETOS</option>
                    <option value="QUINTETOS">&#2728; QUINTETOS</option>
                </select>
            </div>

            <div class="mb-2">
                <label class="small text-muted fw-bold">3. Deportista(s) Participante(s) *</label>
                <div id="contenedorBastonerasDinamicas">
                    <p class="text-muted small mb-0 py-2"><i class="fas fa-info-circle me-1"></i> Por favor, selecciona una categoría primero.</p>
                </div>
            </div>

            <button type="button" class="btn btn-sm w-100 rounded-pill fw-bold text-white shadow-sm mt-3" style="background-color: #6f42c1;" onclick="guardarInscripcionInternaPorGrupos()">
                <i class="fas fa-user-plus me-1"></i> Inscribir a Copa Interna
            </button>
        `;
    } else {
        if(seccionFases) seccionFases.style.display = 'flex';
         
        let opcionesAcademias = '<option value="">-- Seleccionar Academia --</option>';
        arrayAcademiasConfig.forEach(aca => {
            opcionesAcademias += `<option value="${aca}">${aca}</option>`;
        });

        let checkboxesNiveles = '';
        arrayNivelesConfig.forEach(n => {
            const id = n.cla_id || n.CLA_ID;
            const categoria = n.cla_categoria || n.CLA_CATEGORIA;
            const nivel = n.cla_nivel || n.CLA_NIVEL || '';

            if (id && categoria) {
                checkboxesNiveles += `
                    <div class="col-12">
                        <div class="form-check">
                            <input class="form-check-input chk-nivel" type="checkbox" value="${id}" id="chk_cla_${id}">
                            <label class="form-check-label small" for="chk_cla_${id}">
                                <strong>${categoria}</strong> ${nivel ? '- ' + nivel : ''}
                            </label>
                        </div>
                    </div>`;
            }
        });

        colRegistro.innerHTML = `
            <h6 class="fw-bold text-dark small mb-3"><i class="fas fa-plus me-1 text-primary"></i> Registrar Nueva Inscripción con Niveles</h6>
            <div class="mb-2">
                <label class="small text-muted fw-bold">Selecciona la Academia (Previa Invitada) *</label>
                <select class="form-select form-select-sm text-uppercase" id="ins_nombre_academia">
                    ${opcionesAcademias}
                </select>
            </div>
            <div class="mb-2">
                <label class="small text-muted fw-bold">Director / Responsable</label>
                <input type="text" class="form-control form-control-sm text-uppercase" id="ins_responsable" placeholder="Ej: MARÍA DE LOURDES ZEVALLOS">
            </div>
            <div class="mb-3">
                <label class="small text-muted fw-bold">Teléfono de Contacto</label>
                <input type="text" class="form-control form-control-sm" id="ins_telefono" placeholder="Ej: 0999XXXXXX">
            </div>
            <label class="small text-muted fw-bold mb-1">Selecciona Categorías y Rangos Técnicos *</label>
            <div class="card bg-light border p-2 mb-3 rounded-3" style="max-height: 220px; overflow-y: auto;">
                <div class="row g-1">
                    ${checkboxesNiveles}
                </div>
            </div>
            <button type="button" class="btn btn-primary btn-sm w-100 rounded-pill fw-bold" onclick="guardarInscripcionMultiple()">
                <i class="fas fa-save me-1"></i> Confirmar Inscripción Completa
            </button>
        `;
    }
}

// Nueva función para filtrar bastoneras por categoría y cantidad dinámica por modalidad
function actualizarFiltroBastoneras() {
    const cla_id = document.getElementById('int_cla_id').value;
    const modalidad = document.getElementById('int_modalidad').value;
    const contenedor = document.getElementById('contenedorBastonerasDinamicas');

    if (!cla_id) {
        contenedor.innerHTML = '<p class="text-muted small mb-0 py-2"><i class="fas fa-info-circle me-1"></i> Por favor, selecciona una categoría primero.</p>';
        return;
    }

    // Filtrado tolerante a mayúsculas o minúsculas (cla_id o CLA_ID)
    const bastonerasFiltradas = arrayBastonerasCasa.filter(b => {
        const idClasificacion = b.cla_id || b.CLA_ID || b.cla_id_asociado; 
        return String(idClasificacion) === String(cla_id);
    });

    if (bastonerasFiltradas.length === 0) {
        contenedor.innerHTML = '<div class="alert alert-warning py-1 small mb-0" style="font-size: 11px;">No hay deportistas registradas en esta categoría.</div>';
        return;
    }

    // Determinar el número de campos según la modalidad
    let cantidadCampos = 1;
    if (modalidad === 'DÚOS') cantidadCampos = 2;
    else if (modalidad === 'TRÍOS') cantidadCampos = 3;
    else if (modalidad === 'CUARTETOS') cantidadCampos = 4;
    else if (modalidad === 'QUINTETOS') cantidadCampos = 5;

    // Generar las opciones basadas en las deportistas filtradas (tolerante a BAS_NOMBRES)
    let opcionesFiltradas = '<option value="">-- Seleccionar Deportista --</option>';
    bastonerasFiltradas.forEach(bas => {
        const nombres = bas.bas_nombres || bas.BAS_NOMBRES;
        if (nombres) {
            opcionesFiltradas += `<option value="${nombres}">${nombres.toUpperCase()}</option>`;
        }
    });

    // Crear la cantidad de selects dinámicos necesarios
    let HTMLDinamico = '';
    for (let i = 1; i <= cantidadCampos; i++) {
        HTMLDinamico += `
            <div class="mb-2">
                <select class="form-select form-select-sm text-uppercase fw-bold text-dark select-bastonera-interna" id="bastonera_selec_${i}" required>
                    ${opcionesFiltradas}
                </select>
            </div>
        `;
    }

    contenedor.innerHTML = HTMLDinamico;
}

function cargarEscaletaYInscritos(evp_id) {
    if (!evp_id) return;

    fetch(`/stage/controlador/EventoPropioController.php?action=obtener_inscritos&evp_id=${evp_id}`)
    .then(res => res.text())
    .then(html => {
        document.getElementById('divListaInscritos').innerHTML = html;
    })
    .catch(err => {
        console.error("Error al cargar inscritos:", err);
        document.getElementById('divListaInscritos').innerHTML = '<p class="text-danger small text-center py-3">Error al actualizar el historial.</p>';
    });

    fetch(`/stage/controlador/EventoPropioController.php?action=obtener_escaleta&evp_id=${evp_id}`)
    .then(res => res.text())
    .then(html => {
        document.getElementById('contenedorEscaleta').innerHTML = html;
    })
    .catch(err => console.error("Error al cargar escaleta:", err));
}

function copiarLinkPostulacion() {
    const linkInput = document.getElementById('evp_link_inscripcion');
    if (linkInput && linkInput.value && !linkInput.value.includes('Se generará')) {
        linkInput.select();
        linkInput.setSelectionRange(0, 99999);
        navigator.clipboard.writeText(linkInput.value)
            .then(() => alert('¡Enlace de postulación copiado al portapapeles!'))
            .catch(err => console.error('Error al copiar: ', err));
    } else {
        alert('El enlace no está disponible todavía.');
    }
}

// NUEVA FUNCIÓN CORRECTA PARA CAPTURAR LOS CAMPOS DINÁMICOS Y CONCATENAR DEPORTISTAS
function guardarInscripcionInternaPorGrupos() {
    // 1. Capturar el valor REAL usando el ID correcto del select 'int_cla_id'
    const evp_id = document.getElementById('evp_id')?.value || 0;
    const cla_id = document.getElementById('int_cla_id')?.value || 0; // <-- CORREGIDO: antes decía 'int_nvc_id'
    const modalidad = document.getElementById('int_modalidad')?.value || 'SOLISTAS';

    // Se mantiene la asignación para compatibilidad de tu controlador
    const nvc_id = cla_id; 

    console.log("Valores detectados en la corrección:", { evp_id, nvc_id, cla_id, modalidad });

    // 2. Validación en cliente
    if (!evp_id || evp_id == 0) {
        alert("Error: No se ha detectado el ID del evento (evp_id).");
        return;
    }
    if (!cla_id || cla_id == 0) {
        alert("Error: Por favor, selecciona una categoría antes de continuar.");
        return;
    }

    // 3. Capturar y concatenar los nombres de las deportistas seleccionadas
    const selects = document.querySelectorAll('.select-bastonera-interna');
    let listaNombres = [];
    selects.forEach(sel => { 
        if (sel.value.trim() !== "") { 
            listaNombres.push(sel.value.trim()); 
        } 
    });
    
    const nombresConcatenados = listaNombres.join(' - ');

    if (!nombresConcatenados || listaNombres.length === 0) {
        alert("Por favor, selecciona al menos una deportista.");
        return;
    }

    // 4. Construir FormData
    const formData = new FormData();
    formData.append('evp_id', evp_id);
    formData.append('nvc_id', nvc_id);
    formData.append('cla_id', cla_id);
    formData.append('int_modalidad', modalidad);
    formData.append('int_nombres_participantes', nombresConcatenados);

    // 5. Envío AJAX al backend
    fetch('/stage/controlador/EventoPropioController.php?action=inscribir_interna_individual', {
        method: 'POST',
        body: formData
    })
    .then(res => res.json())
    .then(data => {
        if (data.status === 'success') {
            alert('¡Inscripción de Copa Interna guardada con éxito!');
            if (typeof cargarEscaletaYInscritos === 'function') {
                cargarEscaletaYInscritos(evp_id);
            } else {
                location.reload();
            }
        } else {
            alert('Error en el servidor: ' + data.message);
        }
    })
    .catch(err => {
        console.error("Error crítico en la petición:", err);
        alert("Ocurrió un error al procesar el registro.");
    });
}
// Agrega esta función al final de tu tag <script> para procesar la eliminación
function eliminarInscripcion(ins_id, evp_id) {
    if (!ins_id) {
        alert("No se ha detectado el identificador del registro.");
        return;
    }

    if (!confirm("¿Está seguro de que desea eliminar permanentemente esta inscripción del evento actual?")) {
        return;
    }

    const formData = new FormData();
    formData.append('ins_id', ins_id);

    // Apuntamos al controlador con la acción que acabamos de crear
    fetch('/stage/controlador/EventoPropioController.php?action=eliminar_inscripcion', {
        method: 'POST',
        body: formData
    })
    .then(res => res.json())
    .then(data => {
        if (data.status === 'success') {
            alert(data.message);
            // Refrescar el componente visual del historial
            if (typeof cargarEscaletaYInscritos === 'function') {
                cargarEscaletaYInscritos(evp_id);
            } else {
                location.reload();
            }
        } else {
            alert("Error: " + data.message);
        }
    })
    .catch(err => {
        console.error("Error crítico en la comunicación:", err);
        alert("Ocurrió un error al intentar comunicar la baja con el servidor.");
    });
}
function ejecutarSorteoAleatorio() {
    const evp_id = document.getElementById('evp_id')?.value;

    if (!evp_id || evp_id == 0) {
        alert("Por favor, selecciona o gestiona un festival válido primero.");
        return;
    }

    if (!confirm("¿Estás seguro de que deseas sortear el orden de salida? Esto reorganizará de forma totalmente aleatoria a todos los participantes en sus respectivas categorías.")) {
        return;
    }

    // Mostrar un estado de carga en el botón o pantalla
    const contenedor = document.getElementById('contenedorEscaleta');
    contenedor.innerHTML = '<p class="small mb-0 text-muted py-4 text-center"><i class="fas fa-spinner fa-spin me-2"></i>Barajando posiciones y generando turnos...</p>';

    const formData = new FormData();
    formData.append('evp_id', evp_id);

    fetch('/stage/controlador/EventoPropioController.php?action=sortear_orden_salida', {
        method: 'POST',
        body: formData
    })
    .then(res => res.json())
    .then(data => {
        if (data.status === 'success') {
            alert(data.message);
            // Sincronizar de nuevo la escaleta visual para que se vean los cambios
            cargarEscaletaYInscritos(evp_id);
        } else {
            alert("Error al realizar sorteo: " + data.message);
            cargarEscaletaYInscritos(evp_id); // Reestablecer vista original
        }
    })
    .catch(err => {
        console.error("Error crítico en el sorteo:", err);
        alert("No se pudo conectar con el servidor para realizar el sorteo.");
        cargarEscaletaYInscritos(evp_id);
    });
}
function cargarReglamentoCompetidor(niv_id) {
    fetch(`controlador/CalificacionController.php?action=obtener_reglamento_nivel&niv_id=${niv_id}`)
    .then(response => response.json())
    .then(data => {
        if(data.status === 'success') {
            const maxVal = data.max_tecnico;
            
            // Actualizar los inputs numéricos del juez para que no excedan el límite máximo
            const inputs = ['pnt_estilo', 'pnt_precision', 'pnt_ritmo', 'pnt_sincronizacion'];
            inputs.forEach(id => {
                const input = document.getElementById(id);
                if(input) {
                    input.max = maxVal;
                    input.placeholder = `0 - ${maxVal}`;
                }
            });

            // Actualizar un label informativo en el HTML para orientar al juez
            document.getElementById('info-rango-evaluacion').innerHTML = `
                <div class="alert alert-info">
                    <strong>Evaluando Categoría:</strong> ${data.categoria} | 
                    <strong>Rango:</strong> ${data.rango} <br>
                    <small>Límite técnico máximo para este rango: <strong>${maxVal} Puntos</strong>.</small>
                </div>
            `;
            
            // Aquí puedes mostrar dinámicamente un acordeón o lista con las capturas de reglas de ese nivel
            renderizarGuiaJuez(data.rango);
        }
    });
}

function renderizarGuiaJuez(rango) {
    let guiaHtml = '';
    if (rango.includes('AVANZADO')) {
        guiaHtml = `<ul><li>DEDOS: Lanzamientos de 1 giro, doble dominio.</li><li>ACROBACIA: Lanzamientos de espalda, pierna.</li></ul>`;
    } else if (rango.includes('INTERMEDIO')) {
        guiaHtml = `<ul><li>MUÑECA: Lanzamientos de 1 giro.</li><li>ACROBACIA: Lanzamiento lateral, pierna extensión.</li></ul>`;
    } else if (rango.includes('NOVATO')) {
        guiaHtml = `<ul><li>MUÑECA: Rotación horizontal.</li><li>ACROBACIA: Lanzamiento frontal 180°.</li></ul>`;
    }
    document.getElementById('guia-rapida-criterios').innerHTML = guiaHtml;
}
</script>