    // Renderizar tablas de horarios según tipo de carga (quincenal/semanal)
    function renderizarTablasHorariosEditar(tipo, horariosGuardados = null, semanasValidas = null, fechasPorSemana = null) {
        const dias = ['Lunes','Martes','Miércoles','Jueves','Viernes','Sábado','Domingo'];
        let html = '';
        if (tipo === 'quincenal') {
            html += `<div class="table-responsive mb-2"><table class="table table-bordered mb-0" id="tabla-horario-semanal-editar"><thead class="table-light"><tr><th>Día</th><th>Hora de entrada</th><th>Hora de salida</th><th>Descanso</th></tr></thead><tbody>`;
            dias.forEach(dia => {
                let entrada = '';
                let salida = '';
                let checked = '';
                if (horariosGuardados && horariosGuardados['quincenal'] && horariosGuardados['quincenal'][dia]) {
                    entrada = horariosGuardados['quincenal'][dia].entrada || '';
                    salida = horariosGuardados['quincenal'][dia].salida || '';
                    checked = horariosGuardados['quincenal'][dia].descanso ? 'checked' : '';
                }
                html += `<tr><td>${dia}</td><td><input type="time" class="form-control" name="entrada_${dia}" required value="${entrada}"></td><td><input type="time" class="form-control" name="salida_${dia}" required value="${salida}"></td><td class="text-center"><input type="checkbox" class="form-check-input descanso-checkbox" name="descanso_${dia}" ${checked}></td></tr>`;
            });
            html += `</tbody></table></div>`;
        } else {
            // Botón para replicar semana 1 en semana 2 y 3
            html += `<div class="mb-2 text-end"><button type="button" class="btn btn-primary btn-sm" id="btn-replicar-semana-1">Replicar semana 1 en semanas 2 y 3</button></div>`;
            // Generar 3 semanas completas de lunes a domingo, con fechas reales
            let semanas = [];
            // Si hay fechasPorSemana, usarlas; si no, calcularlas
            if (fechasPorSemana && Array.isArray(fechasPorSemana) && fechasPorSemana.length === 3) {
                semanas = fechasPorSemana;
            } else {
                // Calcular fechas de las 3 semanas a partir de la quincena seleccionada
                const quincena = $('#periodo-edicion option:selected').data('quincena');
                if (quincena && quincena.fecha_inicio && quincena.fecha_fin) {
                    let inicio = moment(quincena.fecha_inicio);
                    // Calcular el lunes anterior o igual al inicio
                    let lunesInicio = inicio.clone();
                    while (lunesInicio.day() !== 1) {
                        lunesInicio.subtract(1, 'days');
                    }
                    let actual = lunesInicio.clone();
                    for (let s = 0; s < 3; s++) {
                        let semanaArr = [];
                        for (let d = 0; d < 7; d++) {
                            semanaArr.push({
                                fecha: actual.format('YYYY-MM-DD'),
                                dia: dias[d]
                            });
                            actual.add(1, 'days');
                        }
                        semanas.push(semanaArr);
                    }
                } else {
                    // Fallback: solo días
                    semanas = [dias.slice(), dias.slice(), dias.slice()];
                }
            }
            // Obtener descansos previos si existen
            let descansosPrevios = (horariosGuardados && horariosGuardados['descansos']) ? horariosGuardados['descansos'] : [];
            for (let s = 1; s <= 3; s++) {
                html += `<div class="table-responsive mb-2"><label class="form-label">Semana ${s}</label><table class="table table-bordered mb-0 tabla-horario-semanal-editar" data-semana="${s}"><thead class="table-light"><tr><th>Día</th><th>Fecha</th><th>Hora de entrada</th><th>Hora de salida</th><th>Descanso</th></tr></thead><tbody>`;
                let semanaArr = semanas[s-1];
                for (let d = 0; d < 7; d++) {
                    let entrada = '';
                    let salida = '';
                    let checked = '';
                    let dia = semanaArr && semanaArr[d] ? semanaArr[d].dia : dias[d];
                    let fecha = semanaArr && semanaArr[d] ? semanaArr[d].fecha : '';
                    if (horariosGuardados && horariosGuardados['dias_trabajo']) {
                        let diaData = null;
                        for (let dt of horariosGuardados['dias_trabajo']) {
                            if (dt.dia_semana === dia && String(dt.semana) === String(s)) {
                                diaData = dt;
                                break;
                            }
                        }
                        if (diaData) {
                            entrada = diaData.hora_entrada !== '00:00:00' ? diaData.hora_entrada.substring(0,5) : '';
                            salida = diaData.hora_salida !== '00:00:00' ? diaData.hora_salida.substring(0,5) : '';
                        }
                    }
                    
                    // CRÍTICO: Establecer valores por defecto si están vacíos (igual que en asignar)
                    if (!entrada) entrada = '09:00';
                    if (!salida) salida = '18:00';
                    
                    // Verificar si este día es descanso según descansosPrevios (por fecha exacta)
                    if (descansosPrevios && descansosPrevios.length > 0) {
                        let esDescanso = descansosPrevios.some(d => {
                            // Si el objeto tiene fecha_descanso, comparar con la fecha de la celda
                            if (d.fecha_descanso) {
                                return d.fecha_descanso === fecha;
                            }
                            // Si no tiene fecha, comparar por día y semana
                            return d.dia_semana === dia && (d.semana == s || !d.semana);
                        });
                        if (esDescanso) checked = 'checked';
                    }
                    // NO aplicar clase 'dia-descanso' aquí, dejar que bloquearDiasDescansoEnTablaEditar lo haga
                    let rowClass = '';
                    html += `<tr class="${rowClass}" data-fecha="${fecha}"><td>${dia}</td><td>${fecha}</td><td><input type="time" class="form-control" name="entrada_${dia}_semana${s}" value="${entrada}"></td><td><input type="time" class="form-control" name="salida_${dia}_semana${s}" value="${salida}"></td><td class="text-center"><input type="checkbox" class="form-check-input descanso-checkbox" name="descanso_${dia}_semana${s}" data-dia="${dia}" data-semana="${s}" ${checked}></td></tr>`;
                }
                html += `</tbody></table></div>`;
            }
        }
        $('#bloque-horarios-semanales-editar').html(html);
    }

    // Evento para replicar semana 1 en semanas 2 y 3
    $(document).on('click', '#btn-replicar-semana-1', function() {
        // Para cada día de la semana 1, copiar valores a semana 2 y 3
        for (let semana = 2; semana <= 3; semana++) {
            $('.tabla-horario-semanal-editar[data-semana="1"] tbody tr').each(function(idx) {
                // Obtener valores de semana 1
                let entrada = $(this).find('input[name^="entrada_"]').val();
                let salida = $(this).find('input[name^="salida_"]').val();
                let checked = $(this).find('.descanso-checkbox').is(':checked');
                // Buscar la fila correspondiente en la semana destino
                let $rowDestino = $(`.tabla-horario-semanal-editar[data-semana='${semana}'] tbody tr`).eq(idx);
                $rowDestino.find('input[name^="entrada_"]').val(entrada);
                $rowDestino.find('input[name^="salida_"]').val(salida);
                $rowDestino.find('.descanso-checkbox').prop('checked', checked).trigger('change');
            });
        }
    });

    // Forzar siempre el tipo de carga 'semanal' y eliminar opción de quincenal
    // Si existe el select, lo forzamos a 'semanal' y lo deshabilitamos/ocultamos
    $(function() {
        const $tipoCarga = $('#tipo-carga-horario-editar');
        if ($tipoCarga.length) {
            $tipoCarga.val('semanal');
            $tipoCarga.prop('disabled', true);
            // Opcional: ocultar el select si se desea
            $tipoCarga.closest('.form-group, .mb-3, .row').hide();
        }
        // Al cargar, NO renderizar tablas hasta que el usuario seleccione periodo
        $('#bloque-horarios-semanales-editar').html('<div class="text-center text-muted py-4">Selecciona mes y periodo para cargar los horarios...</div>');
    });
// editar_horario.js
// Lógica exclusiva para editar horarios y descansos de un colaborador
$(document).ready(function() {
    // NOTA: La validación de descansos ahora se maneja en crear.php mediante selects
    // en lugar de checkboxes, por lo que esta sección ya no es necesaria.
    // La validación de máximo 3 descansos por periodo se hace en tiempo real
    // mediante las funciones actualizarContadorDescansosEditar() y los event handlers
    // de los botones agregar/quitar descansos.
    // --- NUEVO: Llenar tabla semanal con datos registrados al seleccionar 'horario semanal' ---
    $(document).on('change', '#tipo-carga-horario-editar', function() {
        const tipo = $(this).val();
        if (tipo === 'semanal') {
            // Obtener datos necesarios
            const curp = $('#modalEditarHorario').data('curp-editar');
            const periodo = $('#periodo-edicion').val();
            if (!curp || !periodo) {
                renderizarTablasHorariosEditar('semanal');
                return;
            }
            // Llamar endpoint de horario del colaborador para el periodo
            $.get(`../../../backend/api/get_horario_colaborador.php?curp=${curp}&id_quincena=${periodo}`, function(resp) {
                if (typeof resp === 'string') resp = JSON.parse(resp);
                function agruparHorariosPorSemana(horarioPlano) {
                    let semanas = [[], [], []];
                    for (let i = 0; i < horarioPlano.length; i++) {
                        let semanaIdx = Math.floor(i / 7);
                        semanas[semanaIdx].push({
                            ...horarioPlano[i],
                            semana: semanaIdx + 1
                        });
                    }
                    return semanas;
                }
                let dias_trabajo = [];
                if (resp.horario && resp.horario.length === 21) {
                    let semanas = agruparHorariosPorSemana(resp.horario);
                    semanas.forEach((semanaArr, idx) => {
                        semanaArr.forEach(diaObj => {
                            dias_trabajo.push({
                                ...diaObj,
                                semana: idx + 1
                            });
                        });
                    });
                }
                renderizarTablasHorariosEditar('semanal', { dias_trabajo, descansos: resp.descansos });
            });
        } else {
            renderizarTablasHorariosEditar('quincenal');
        }
    });
    // Abrir modal de edición
    $(document).on('click', '.btn-editar-horario', function() {
        const curp = $(this).data('id');
        const nombre = $(this).data('nombre');
        $('#modalEditarHorario').data('curp-editar', curp);
        $('#modalEditarHorarioLabel').text('Editar horario de ' + nombre);
        // Ocultar las tablas de semana 1,2,3 al abrir el modal
        $('#bloque-horarios-semanales-editar').html('<div class="text-center text-muted py-4">Selecciona mes y periodo para cargar los horarios...</div>');
        $('#modalEditarHorario').modal('show');
        cargarMesesEdicion();
        // Llenar periodos/quincenas al abrir el modal
        setTimeout(function() {
            const mes = $('#mes-edicion').val();
            if (mes) {
                let anio = 2025;
                $.get(`../../../backend/api/quincenas_disponibles.php?year=${anio}&month=${mes}`, function(resp) {
                    if (typeof resp === 'string') resp = JSON.parse(resp);
                    const select = $('#periodo-edicion');
                    select.empty();
                    select.append('<option value="">Selecciona un periodo</option>');
                    if (resp.success && Array.isArray(resp.quincenas) && resp.quincenas.length > 0) {
                        resp.quincenas.forEach(function(q) {
                            select.append(`<option value="${q.id_quincena}" data-quincena='${JSON.stringify(q)}'>${q.nombre} (${q.fecha_inicio} al ${q.fecha_fin})</option>`);
                        });
                    } else {
                        select.append('<option value="">No hay quincenas disponibles</option>');
                    }
                });
            }
        }, 100);
    });

    // Cargar meses disponibles
    function cargarMesesEdicion() {
        // Igual que en asignar: mostrar 2 meses atrás, actual y 2 adelante, año fijo 2025
        const meses = [
            'Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'
        ];
        const hoy = new Date();
        const mesActual = hoy.getMonth();
        let $mes = $('#mes-edicion');
        $mes.empty();
        $mes.append('<option value="">Selecciona un mes</option>');
        let mesesValidos = [];
        for(let i = -2; i <= 2; i++) {
            let m = mesActual + i;
            let anio = 2025;
            if(m < 0) { m += 12; }
            if(m > 11) { m -= 12; }
            mesesValidos.push(m);
        }
        mesesValidos.forEach((mes) => {
            $mes.append(`<option value="${mes+1}">${meses[mes]} 2025</option>`);
        });
        $mes.val("");
    }

    // Al cambiar mes, cargar periodos (quincenas) para ese mes
    $('#mes-edicion').on('change', function() {
        const mes = $(this).val();
        const curp = $('#modalEditarHorario').data('curp-editar');
        if (!mes || !curp) return;
        let anio = 2025;
        $.get(`../../../backend/api/quincenas_disponibles.php?year=${anio}&month=${mes}`, function(resp) {
            if (typeof resp === 'string') resp = JSON.parse(resp);
            const select = $('#periodo-edicion');
            select.empty();
            select.append('<option value="">Selecciona un periodo</option>');
            if (resp.success && Array.isArray(resp.quincenas) && resp.quincenas.length > 0) {
                resp.quincenas.forEach(function(q) {
                    select.append(`<option value="${q.id_quincena}" data-quincena='${JSON.stringify(q)}'>${q.nombre} (${q.fecha_inicio} al ${q.fecha_fin})</option>`);
                });
            } else {
                select.append('<option value="">No hay quincenas disponibles</option>');
            }
        });
    });

    // Cargar periodos disponibles y prellenar datos
    function cargarPeriodosEdicion(curp) {
        $.get('../../../backend/api/quincenas_disponibles.php', function(resp) {
            if (typeof resp === 'string') resp = JSON.parse(resp);
            const select = $('#periodo-edicion');
            select.empty();
            if (resp.success && resp.quincenas) {
                resp.quincenas.forEach(function(q, idx) {
                    select.append(`<option value="${q.id}">${q.nombre}</option>`);
                });
                // Selecciona el primer periodo disponible y dispara el evento change
                if (resp.quincenas.length > 0) {
                    select.val(resp.quincenas[0].id).trigger('change');
                }
            }
        });
    }

    // Al cambiar periodo, cargar horario y descansos
    $('#periodo-edicion').on('change', function() {
        const curp = $('#modalEditarHorario').data('curp-editar');
        let id_quincena = $(this).val();
        if (!curp || !id_quincena || id_quincena === '' || id_quincena === 'undefined' || isNaN(Number(id_quincena))) {
            console.warn('Faltan datos válidos para consultar horario', {curp, id_quincena});
            Swal.fire({ icon: 'error', title: 'Error', text: 'Selecciona un periodo (quincena) válido antes de continuar.' });
            return;
        }
        id_quincena = Number(id_quincena);
        $.get(`../../../backend/api/get_horario_colaborador.php?curp=${curp}&id_quincena=${id_quincena}`, function(resp) {
            if (typeof resp === 'string') resp = JSON.parse(resp);
            // Si la respuesta es un arreglo plano de 21 elementos, agrupar por semana
            function agruparHorariosPorSemana(horarioPlano) {
                let semanas = [[], [], []];
                for (let i = 0; i < horarioPlano.length; i++) {
                    let semanaIdx = Math.floor(i / 7);
                    semanas[semanaIdx].push({
                        ...horarioPlano[i],
                        semana: semanaIdx + 1
                    });
                }
                return semanas;
            }
            let dias_trabajo = [];
            if (resp.horario && resp.horario.length === 21) {
                let semanas = agruparHorariosPorSemana(resp.horario);
                semanas.forEach((semanaArr, idx) => {
                    semanaArr.forEach(diaObj => {
                        dias_trabajo.push({
                            ...diaObj,
                            semana: idx + 1
                        });
                    });
                });
            }
            // Renderizar la tabla semanal con los datos agrupados
            renderizarTablasHorariosEditar('semanal', { dias_trabajo, descansos: resp.descansos });
            // Llenar selects de descanso agrupados por semana
            const quincena = $('#periodo-edicion option:selected').data('quincena');
            if (quincena) {
                renderizarDescansosPorSemanaEdicion(quincena.fecha_inicio, quincena.fecha_fin, resp.descansos);
            }
        });
    });

    // Guardar cambios
    $('#form-editar-horario').on('submit', function(e) {
        e.preventDefault();
        const curp = $('#lista-colaboradores-editar li').first().text().match(/ID: (\w+)/)?.[1];
        
        // NUEVO: Usar window.periodoActivo en lugar del select #periodo-edicion
        if (!window.periodoActivo || !window.periodoActivo.id_quincena) {
            Swal.fire({ 
                icon: 'error', 
                title: 'Error', 
                text: 'No hay un periodo activo configurado. Contacta al administrador.' 
            });
            return;
        }
        
        let id_quincena = window.periodoActivo.id_quincena;
        
        if (!curp) {
            Swal.fire({ icon: 'error', title: 'Error', text: 'No se pudo identificar al colaborador.' });
            return;
        }
        
        let horarios = [];
        if ($('.tabla-horario-semanal-editar').length > 0) {
            // Recorrer todas las tablas semanales
            $('.tabla-horario-semanal-editar').each(function() {
                const semana = $(this).data('semana');
                $(this).find('tbody tr').each(function() {
                    const $row = $(this);
                    const id_detalle = $row.data('id-detalle') || null; // NUEVO: Capturar id_detalle
                    const dia = $row.find('td:eq(1)').text().trim(); // Segunda columna (después de Día #)
                    const $entrada = $row.find('input[name^="entrada_"]');
                    const $salida = $row.find('input[name^="salida_"]');
                    const entrada = $entrada.val();
                    const salida = $salida.val();
                    
                    // Obtener fecha del mapeo guardado
                    let fechasPorSemana = window.fechasPorSemanaCalculadasEditar || [];
                    const fecha = (fechasPorSemana[semana-1] && fechasPorSemana[semana-1][dia]) || null;
                    
                    // Si el input está deshabilitado O tiene placeholder "------", es día de descanso
                    let horaEntrada = entrada;
                    let horaSalida = salida;
                    if ($entrada.prop('disabled') || entrada === '' || entrada === '----' || 
                        $salida.prop('disabled') || salida === '' || salida === '----') {
                        horaEntrada = '00:00';
                        horaSalida = '00:00';
                    }
                    
                    horarios.push({
                        id_detalle: id_detalle, // NUEVO: Incluir id_detalle
                        semana: semana,
                        dia_semana: dia,
                        fecha: fecha,
                        hora_entrada: horaEntrada,
                        hora_salida: horaSalida
                    });
                });
            });
        } else {
            // Fallback: tabla simple (quincenal)
            $('#tabla-editar-horario-semanal tbody tr').each(function() {
                const dia = $(this).find('td:first').text().trim();
                const entrada = $(this).find('input[name^="entrada_"]').val();
                const salida = $(this).find('input[name^="salida_"]').val();
                horarios.push({
                    dia_semana: dia,
                    hora_entrada: entrada,
                    hora_salida: salida
                });
            });
        }
        
        // Recopilar descansos de los selects (no de checkboxes)
        let descansosPorSemana = [];
        $('#descansos-por-semana-editar select').each(function() {
            const valor = $(this).val();
            // SOLO agregar si el valor NO es vacío (no es "Sin descanso")
            if (valor && valor !== '') {
                const partes = valor.split('|');
                const dia = partes[0];
                const fecha = partes[1];
                const semana = $(this).data('semana');
                const id_descanso = $(this).data('id-descanso') || null; // NUEVO: Capturar id_descanso
                
                descansosPorSemana.push({ 
                    id_descanso: id_descanso, // NUEVO
                    dia_semana: dia, 
                    semana: semana, 
                    fecha_descanso: fecha 
                });
            }
        });
        
        console.log('[DEBUG][submit] horarios enviados:', horarios);
        console.log('[DEBUG][submit] descansos enviados:', descansosPorSemana);
        
        // Validar que haya horarios
        if (horarios.length === 0) {
            Swal.fire({ icon: 'error', title: 'Error', text: 'No hay horarios para actualizar.' });
            return;
        }
        
        // NUEVO: Usar nuevo endpoint optimizado
        $.post('../../../backend/api/new_update_horario_semanal.php', {
            curp: curp,
            id_quincena: id_quincena,
            horarios: JSON.stringify(horarios), // CORREGIDO: horarios (plural)
            descansos: JSON.stringify(descansosPorSemana)
        }, function(resp) {
            if (typeof resp === 'string') resp = JSON.parse(resp);
            if (!resp.success) {
                let errorMsg = resp.message || 'No se pudo actualizar el horario.';
                if (resp.debug) {
                    console.error('DEBUG del error:', resp.debug);
                    errorMsg += '\n\nDebug: ' + JSON.stringify(resp.debug, null, 2);
                }
                Swal.fire({ icon: 'error', title: 'Error', text: errorMsg });
                return;
            }
            $('#modalEditarHorario').modal('hide');
            Swal.fire({
                icon: 'success',
                title: 'Horario actualizado',
                text: 'Los cambios se guardaron correctamente.',
                timer: 2000,
                showConfirmButton: false
            }).then(() => {
                location.reload();
            });
        });
    });

    // Limpiar estado al cerrar
    $('#modalEditarHorario').on('hidden.bs.modal', function() {
        $('#modalEditarHorarioLabel').text('Editar horario de colaborador');
        $('#modalEditarHorario').removeData('curp-editar');
        $('#tabla-editar-horario-semanal tbody').empty();
        $('#descansos-editar-semanales').empty();
    });

    // Permitir disparo global
    $(document).on('editarHorarioColaborador', function(e, data) {
        if (!data || !data.curp) return;
        const curp = data.curp;
        const nombre = data.nombre;
        $('#modalEditarHorarioLabel').text('Editar horario de ' + nombre);
        $('#modalEditarHorario').data('curp-editar', curp);
        $('#modalEditarHorario').modal('show');
        cargarMesesEdicion();
    });

    // Utilidad: obtener fechas de la quincena y agruparlas por semana (lunes a domingo)
    function obtenerSemanasDeQuincena(fechaInicio, fechaFin) {
        let semanas = [];
        let semanaActual = [];
        let fecha = new Date(fechaInicio);
        const fin = new Date(fechaFin);
        while (fecha <= fin) {
            semanaActual.push(new Date(fecha));
            if (fecha.getDay() === 0 || fecha.getTime() === fin.getTime()) { // Domingo o último día
                semanas.push(semanaActual);
                semanaActual = [];
            }
            fecha.setDate(fecha.getDate() + 1);
        }
        return semanas;
    }


    // --- NUEVO: Replica lógica de crear.js para selects de descanso múltiples por semana ---
    function renderizarDescansosPorSemanaEdicion(fechaInicio, fechaFin, descansosPrevios = []) {
        console.log('[DEBUG] renderizarDescansosPorSemanaEdicion', { fechaInicio, fechaFin, descansosPrevios });
        // Siempre mostrar 3 semanas completas de lunes a domingo
        const diasSemana = ['Lunes','Martes','Miércoles','Jueves','Viernes','Sábado','Domingo'];
        let inicio = moment(fechaInicio);
        let fin = moment(fechaFin);
        // Calcular el lunes anterior o igual al inicio
        let lunesInicio = inicio.clone();
        while (lunesInicio.day() !== 1) {
            lunesInicio.subtract(1, 'days');
        }
        // Calcular el domingo posterior o igual al fin
        let domingoFin = fin.clone();
        while (domingoFin.day() !== 0) {
            domingoFin.add(1, 'days');
        }
        // Generar las fechas de las 3 semanas completas
        let semanas = [[],[],[]];
        let actual = lunesInicio.clone();
        for (let s = 0; s < 3; s++) {
            for (let d = 0; d < 7; d++) {
                semanas[s].push({
                    fecha: actual.format('YYYY-MM-DD'),
                    dia: diasSemana[d],
                    numDia: actual.date()
                });
                actual.add(1, 'days');
            }
        }

        // Asignar semana a cada descansoPrevio según la fecha
        let descansosPreviosConSemana = (descansosPrevios || []).map(d => {
            if (!d || !d.fecha_descanso) return d;
            let semanaNum = null;
            for (let s = 0; s < semanas.length; s++) {
                if (semanas[s].some(diaObj => diaObj.fecha === d.fecha_descanso)) {
                    semanaNum = s + 1;
                    break;
                }
            }
            return { ...d, semana: semanaNum };
        });

        console.log('[DEBUG] semanas generadas:', semanas);
        console.log('[DEBUG] descansosPreviosConSemana:', descansosPreviosConSemana);

        // Guardar semanas globalmente
        window.semanasDescansoEditar = semanas;

        let html = '';
        for (let s = 0; s < 3; s++) {
            html += `<div class="mb-2" id="semana-descanso-editar-${s+1}"><label>Semana ${s+1}:</label> `;
            
            // Obtener descansos previos para esta semana
            let descansosSemana = (descansosPreviosConSemana || []).filter(d => d && d.semana === (s+1));
            console.log(`[DEBUG] Semana ${s+1} - descansosSemana:`, descansosSemana);
            
            // Renderizar primer select (siempre existe)
            let primerDescanso = descansosSemana[0] || null;
            html += renderDescansoSelectEditar(semanas[s], s+1, 1, primerDescanso);
            
            // Si hay descansos adicionales, renderizar selects adicionales con botón de quitar
            for (let i = 1; i < descansosSemana.length; i++) {
                html += ` <button type="button" class="btn btn-danger btn-sm btn-remove-descanso-editar" title="Quitar descanso"><i class="fas fa-minus"></i></button>`;
                html += renderDescansoSelectEditar(semanas[s], s+1, i+1, descansosSemana[i]);
            }
            
            // Botón agregar (deshabilitar si solo hay 1 día en la semana)
            let disabledAttr = semanas[s].length <= 1 ? 'disabled' : '';
            html += ` <button type="button" class="btn btn-success btn-sm btn-add-descanso-editar" data-semana="${s+1}" title="Agregar descanso" ${disabledAttr}><i class="fas fa-plus"></i></button>`;
            html += '</div>';
        }
        console.log('[DEBUG] HTML final descansos:', html);
        console.log('[DEBUG] Aplicando HTML a #descansos-por-semana-editar');
        $('#descansos-por-semana-editar').html(html);
        console.log('[DEBUG] HTML aplicado, verificando selects...');
        console.log('[DEBUG] Selects en DOM:', $('.descanso-semana-select-editar').length);
        
        // NUEVO: Después de renderizar, aplicar bloqueo de días de descanso y actualizar contador
        setTimeout(function() {
            console.log('[DEBUG] Timeout ejecutado, llamando bloquearDiasDescansoEnTablaEditar');
            if (typeof bloquearDiasDescansoEnTablaEditar === 'function') {
                bloquearDiasDescansoEnTablaEditar();
            } else {
                console.error('[DEBUG] bloquearDiasDescansoEnTablaEditar NO está definida');
            }
            if (typeof actualizarContadorDescansosEditar === 'function') {
                actualizarContadorDescansosEditar();
            }
        }, 100);
    }

    function renderDescansoSelectEditar(diasSemanaArr, semanaNum, selectNum, descansoPrevio) {
        let name = `descanso_semana_${semanaNum}_${selectNum}`;
        let html = `<select class="form-select form-select-sm descanso-semana-select-editar mt-1" name="${name}" data-semana="${semanaNum}" data-select="${selectNum}">`;
        html += '<option value="">Sin descanso</option>';
        diasSemanaArr.forEach(function(diaObj) {
            let selected = '';
            if (descansoPrevio && descansoPrevio.dia_semana === diaObj.dia && descansoPrevio.fecha_descanso === diaObj.fecha) {
                selected = 'selected';
            }
            html += `<option value="${diaObj.dia}|${diaObj.fecha}" ${selected}>${diaObj.dia} ${diaObj.numDia} (${diaObj.fecha})</option>`;
        });
        html += '</select>';
        return html;
    }
    // --- FIN NUEVO ---

    // En el evento de cambio de quincena en el modal de edición, usa la función anterior:
    $(document).on('change', '#periodo-edicion', function() {
        const quincena = $('#periodo-edicion option:selected').data('quincena');
        if (quincena && quincena.fecha_inicio && quincena.fecha_fin) {
            renderizarDescansosPorSemanaEdicion(quincena.fecha_inicio, quincena.fecha_fin);
        } else {
            $('#descansos-por-semana').html('');
        }
        // Si el tipo de carga es semanal, volver a cargar los datos registrados
        const tipo = $('#tipo-carga-horario-editar').val();
        if (tipo === 'semanal') {
            const curp = $('#modalEditarHorario').data('curp-editar');
            const periodo = $('#periodo-edicion').val();
            if (!curp || !periodo) {
                renderizarTablasHorariosEditar('semanal');
                return;
            }
            $.get(`../../../backend/api/get_horario_colaborador.php?curp=${curp}&id_quincena=${periodo}`, function(resp) {
                if (typeof resp === 'string') resp = JSON.parse(resp);
                function agruparHorariosPorSemana(horarioPlano) {
                    let semanas = [[], [], []];
                    for (let i = 0; i < horarioPlano.length; i++) {
                        let semanaIdx = Math.floor(i / 7);
                        semanas[semanaIdx].push({
                            ...horarioPlano[i],
                            semana: semanaIdx + 1
                        });
                    }
                    return semanas;
                }
                let dias_trabajo = [];
                if (resp.horario && resp.horario.length === 21) {
                    let semanas = agruparHorariosPorSemana(resp.horario);
                    semanas.forEach((semanaArr, idx) => {
                        semanaArr.forEach(diaObj => {
                            dias_trabajo.push({
                                ...diaObj,
                                semana: idx + 1
                            });
                        });
                    });
                }
                renderizarTablasHorariosEditar('semanal', { dias_trabajo, descansos: resp.descansos });
            });
        }
    });

    // NOTA: Los eventos para agregar/quitar descansos (btn-add-descanso-editar y btn-remove-descanso-editar)
    // ahora se manejan en crear.php para evitar duplicación de código y ejecución doble
});
