// Script modular para el manejo del modal de asignación de horario semanal y conexión con el backend

function obtenerDiasQuincena(periodo, year, month) {
    // Devuelve un array de fechas (YYYY-MM-DD) de la quincena seleccionada
    let dias = [];
    let start, end;
    if (periodo === 'quincena1') {
        start = 1;
        end = 15;
    } else {
        start = 16;
        end = new Date(year, month, 0).getDate();
    }
    for (let d = start; d <= end; d++) {
        let fecha = new Date(year, month - 1, d);
        dias.push({
            fecha: fecha.toISOString().slice(0, 10),
            dia: fecha.toLocaleDateString('es-MX', { weekday: 'long' })
        });
    }
    return dias;
}

function obtenerHorarioSemanalDelModal() {
    // Lee los valores de la tabla de horario semanal
    const dias = ['Lunes','Martes','Miércoles','Jueves','Viernes','Sábado','Domingo'];
    let horarios = {};
    dias.forEach(dia => {
        let entradaInput = document.querySelector(`[name='entrada_${dia}']`);
        let salidaInput = document.querySelector(`[name='salida_${dia}']`);
        horarios[dia] = {
            entrada: entradaInput ? entradaInput.value : null,
            salida: salidaInput ? salidaInput.value : null
        };
    });
    return horarios;
}

function obtenerDescansosPorSemanaDelModal() {
    // Obtiene los valores de los selects de descanso por semana (pueden ser vacíos)
    let descansos = [];
    document.querySelectorAll('.descanso-semana-select').forEach(sel => {
        descansos.push(sel.value || "");
    });
    return descansos;
}

function asignarHorarioAJAX(colaboradores, id_quincena, horarios, callback) {
    // Envía los datos al backend para cada colaborador
    let pendientes = colaboradores.length;
    let resultados = [];
    // Obtener descansos del modal
    let descansos = obtenerDescansosPorSemanaDelModal();
    colaboradores.forEach(colab => {
        const formData = new FormData();
        formData.append('curp', colab.id);
        formData.append('id_quincena', id_quincena);
        formData.append('horarios', JSON.stringify(horarios));
        formData.append('descansos', JSON.stringify(descansos));
        fetch('../../../backend/api/asignar_horario_semanal.php', {
            method: 'POST',
            body: formData
        })
        .then(res => res.json())
        .then(data => {
            resultados.push({colab, data});
            pendientes--;
            if (pendientes === 0) callback(resultados);
        })
        .catch(err => {
            resultados.push({colab, data: {success: false, message: err.toString()}});
            pendientes--;
            if (pendientes === 0) callback(resultados);
        });
    });
}

function pintarResumenEnCalendario(calendar, colaboradores, diasQuincena, horarios) {
    // Limpia eventos previos de resumen
    calendar.getEvents().forEach(ev => {
        if (ev.extendedProps && ev.extendedProps.resumenHorario) ev.remove();
    });
    colaboradores.forEach(colab => {
        // Obtener la fecha de ingreso si existe
        let fechaIngreso = colab.fecha_ingreso || colab['FECHA DE INGRESO'] || colab['fecha_ingreso'];
        let fechaIngresoObj = fechaIngreso ? new Date(fechaIngreso) : null;
        diasQuincena.forEach(diaObj => {
            let fechaEventoObj = new Date(diaObj.fecha);
            // Si hay fecha de ingreso y la fecha del evento es anterior, no pintar
            if (fechaIngresoObj && fechaEventoObj < fechaIngresoObj) return;
            let diaSemana = diaObj.dia.charAt(0).toUpperCase() + diaObj.dia.slice(1).toLowerCase();
            if (horarios[diaSemana]) {
                let entrada = horarios[diaSemana].entrada;
                let salida = horarios[diaSemana].salida;
                if (entrada && salida && entrada !== '00:00' && salida !== '00:00') {
                    calendar.addEvent({
                        title: colab.nombre + ' (' + entrada + '-' + salida + ')',
                        start: diaObj.fecha,
                        allDay: true,
                        backgroundColor: '#e0f7fa',
                        borderColor: '#00bcd4',
                        textColor: '#006064',
                        extendedProps: { resumenHorario: true, colaboradorId: colab.id }
                    });
                }
            }
        });
    });
}

window.obtenerDiasQuincena = obtenerDiasQuincena;
window.obtenerHorarioSemanalDelModal = obtenerHorarioSemanalDelModal;
window.asignarHorarioAJAX = asignarHorarioAJAX;
window.pintarResumenEnCalendario = pintarResumenEnCalendario;
window.obtenerDescansosPorSemanaDelModal = obtenerDescansosPorSemanaDelModal;
