function generarColorPastel(colorBase) {

  // Convertir el color base de formato hexadecimal a RGB

  var r = parseInt(colorBase.substring(1, 3), 16);

  var g = parseInt(colorBase.substring(3, 5), 16);

  var b = parseInt(colorBase.substring(5, 7), 16);



  // Aplicar un factor de mezcla para suavizar el color

  var factor = 0.7;

  r = Math.round(r * factor + 255 * (1 - factor));

  g = Math.round(g * factor + 255 * (1 - factor));

  b = Math.round(b * factor + 255 * (1 - factor));



  // Convertir el nuevo color RGB de vuelta a formato hexadecimal

  var colorPastel = "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);



  return colorPastel;

}





function obtenerContraste(color) {

    // Convierte el color hexadecimal a RGB

        var rgb = [];

        for (var i = 1; i < 7; i += 2) {

            rgb.push(parseInt(color.substr(i, 2), 16));

        }



        // Calcula el contraste utilizando la fórmula YIQ

        return (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;

    }



function combinarColores(color1, color2) {

    // Convierte los colores hexadecimales a valores RGB

    const rgb1 = hexToRgb(color1);

    const rgb2 = hexToRgb(color2);



    // Promedia los valores RGB

    const avgRed = Math.floor((rgb1.red + rgb2.red) / 2);

    const avgGreen = Math.floor((rgb1.green + rgb2.green) / 2);

    const avgBlue = Math.floor((rgb1.blue + rgb2.blue) / 2);



    // Convierte los valores RGB promediados de nuevo a formato hexadecimal

    const combinedColor = rgbToHex(avgRed, avgGreen, avgBlue);



    return combinedColor;

}



// Convierte un color hexadecimal a valores RGB

function hexToRgb(hex) {

    // Elimina el '#' si está presente

    hex = hex.replace(/^#/, '');



    // Convierte cada componente a un número decimal

    const bigint = parseInt(hex, 16);

    

    // Extrae los componentes de color

    const red = (bigint >> 16) & 255;

    const green = (bigint >> 8) & 255;

    const blue = bigint & 255;



    return { red, green, blue };

}



// Convierte valores RGB a un color hexadecimal

function rgbToHex(red, green, blue) {

    return `#${(1 << 24 | red << 16 | green << 8 | blue).toString(16).slice(1)}`;

}



    function colorearRowByMenuContextLoad(idtupla,color) {

        var target_box=document.getElementById('box'+idtupla);

        if(target_box){

            target_box.style.backgroundColor= color;

            var contraste = obtenerContraste(color);

            if (obtenerContraste(color) > 128) {

                target_box.style.color = '#000'; // Texto en negro para fondos claros

            } else {

                target_box.style.color = '#fff'; // Texto en blanco para fondos oscuros

            }

        }



        const fila = document.getElementById(idtupla);

        if (fila) {

            // Cambiar el color de fondo de la fila

            //fila.style.backgroundColor = input_color.value; // Cambia a tu color deseado

            const celdas = fila.getElementsByTagName('td');

            

            for (let i = 0; i < celdas.length; i++) {



            //para omitir el primero td inicializamos en 1 y para el ultimo length-1

            //for (let i = 1; i < celdas.length-1; i++) {

            if(celdas[i].style.backgroundColor!=''){

                celdas[i].style.backgroundColor = combinarColores(celdas[i].style.backgroundColor, color);

            }else{

                celdas[i].style.backgroundColor = color;    

            }

            var contraste = obtenerContraste(color);

                if (contraste > 128) {

                    celdas[i].style.color = '#000'; // Texto en negro para fondos claros

                } else {

                    celdas[i].style.color = '#fff'; // Texto en blanco para fondos oscuros

                }

               // celdas[i].style.backgroundColor = input_color.value; // Cambia a tu color deseado

            }

        }

    }



    function colorearColumnaByMenuContextLoad(columnIndex,color) {

        // Obtiene todas las filas de la tabla

        var filas = miTabla.getElementsByTagName('tr');

        // Itera sobre cada fila y colorea la celda en la posición columnIndex

        for (var i = 0; i < filas.length; i++) {

            var celda = filas[i].getElementsByTagName('td')[columnIndex];

            if (celda) {

                /*celda.classList.toggle('colorear-columna');*/

                celda.style.backgroundColor=color;

                var contraste = obtenerContraste(color);

                if (contraste > 128) {

                    celda.style.color = '#000'; // Texto en negro para fondos claros

                } else {

                    celda.style.color = '#fff'; // Texto en blanco para fondos oscuros

                }

            }

        }

    }



        function resaltarColumna(column_index){

            document.getElementById(column_index.replace('th-','col')).style.display='block';

        }

        function resaltarFila(row_index){

            document.getElementById(row_index.replace('td-','row')).style.display='block';

        }







    /*codigo para colorear tabla headers*/



      function changeColumnColor(input_color) {

        const input = document.getElementById(input_color.id);

        const celdaInput = input.parentNode; // Obtener el elemento padre (celda)



        if (celdaInput) {

            const fila = celdaInput.parentNode; // Obtener la fila

            const celdas = fila.getElementsByTagName("th"); // Obtener todas las celdas de la fila

            let colIndex = -1;



            for (let i = 0; i < celdas.length; i++) {



                if (celdas[i] === celdaInput) {

                    colIndex = i; // Índice de columna de la celda que contiene el <input>

                    break;

                }

            }



            if (colIndex !== -1) {

                let columns = document.querySelectorAll("td:nth-child(" + (colIndex + 1) + ")");

                columns.forEach(function (col) {

                if(col.style.backgroundColor!=''){

                    col.style.backgroundColor = combinarColores(col.style.backgroundColor, input_color.value);

                }else{

                    col.style.backgroundColor = input_color.value;    

                }



                var contraste = obtenerContraste(input_color.value);

                if (contraste > 128) {

                    col.style.color = '#000'; // Texto en negro para fondos claros

                } else {

                    col.style.color = '#fff'; // Texto en blanco para fondos oscuros

                }



                });

                document.getElementById(input_color.id).style.display='none';

                // Puedes implementar la lógica para guardar la configuración en un archivo en el servidor



                var configuracion = { column: colIndex, color: input_color.value };

                $.ajax({

                    url: '../bussines/configuracion_colores_tabla.php',

                    type: 'POST',

                    data: { action:'guardar_color_columna',configuracion: configuracion },

                    success: function () {

                        console.log('Configuración guardada.');

                    }

                });

            } 

        }

      }



      function changeRowColor(input_color) {

        const row=input_color.id;

        const idtupla=row.replace('row','');

        const fila = document.getElementById(idtupla);



        if (fila) {

            // Cambiar el color de fondo de la fila

            fila.style.backgroundColor = input_color.value; // Cambia a tu color deseado

            const celdas = fila.getElementsByTagName('td');

            

            for (let i = 0; i < celdas.length; i++) {

            //para omitir el primero td inicializamos en 1 y para el ultimo length-1

            //for (let i = 1; i < celdas.length-1; i++) {

                if(celdas[i].style.backgroundColor!=''){

                    celdas[i].style.backgroundColor = generarColorPastel(combinarColores(celdas[i].style.backgroundColor, input_color.value));

                }else{

                    celdas[i].style.backgroundColor = generarColorPastel(input_color.value);    

                }

                var contraste = obtenerContraste(input_color.value);

                if (contraste > 128) {

                    celdas[i].style.color = '#000'; // Texto en negro para fondos claros

                } else {

                    celdas[i].style.color = '#fff'; // Texto en blanco para fondos oscuros

                }

                //celdas[i].style.backgroundColor = input_color.value; // Cambia a tu color deseado

            }

            document.getElementById(input_color.id).style.display='none';

            var configuracion = { row: idtupla, color: input_color.value };

         // Puedes implementar la lógica para guardar la configuración en un archivo en el servidor

        $.ajax({

            url: '../bussines/configuracion_colores_tabla.php',

            type: 'POST',

            data: { action:'guardar_color_fila',configuracion: configuracion },

            success: function () {

                console.log('Configuración guardada.');

            }

        });

        }

      }

    /*termina codigo para colorear tabla de headers*/

    /*agregamos codigo para colorear columna con deteccion automatica*/

    var miTabla = document.getElementById('tabla_modulo');



    function colorearColumnaByMenuContext(columnIndex,color) {

        // Obtiene todas las filas de la tabla

        var filas = miTabla.getElementsByTagName('tr');

        var configuracion = { column: columnIndex, color: color };

        // Itera sobre cada fila y colorea la celda en la posición columnIndex

        for (var i = 0; i < filas.length; i++) {

            var celda = filas[i].getElementsByTagName('td')[columnIndex];

            if (celda) {

                if(celda.style.backgroundColor!=''){

                    celda.style.backgroundColor = generarColorPastel(combinarColores(celda.style.backgroundColor, color));

                }else{

                    celda.style.backgroundColor = generarColorPastel(color);    

                }

                var contraste = obtenerContraste(color);

                if (contraste > 128) {

                    celda.style.color = '#000'; // Texto en negro para fondos claros

                } else {

                    celda.style.color = '#fff'; // Texto en blanco para fondos oscuros

                }

            }

        }

        // Puedes implementar la lógica para guardar la configuración en un archivo en el servidor

        $.ajax({

            url: '../bussines/configuracion_colores_tabla.php',

            type: 'POST',

            data: { action:'guardar_color_columna',configuracion: configuracion },

            success: function () {

                console.log('Configuración guardada.');

            }

        });

    }





    function colorearRowByMenuContext(idtupla,color) {

        var target_box=document.getElementById('box'+idtupla);

        if(target_box){

            target_box.style.backgroundColor= generarColorPastel(color);

            var contraste = obtenerContraste(color);

            if (obtenerContraste(color) > 128) {

                target_box.style.color = '#000'; // Texto en negro para fondos claros

            } else {

                target_box.style.color = '#fff'; // Texto en blanco para fondos oscuros

            }

        }



        const fila = document.getElementById(idtupla);

        if (fila) {

            // Cambiar el color de fondo de la fila

            //fila.style.backgroundColor = input_color.value; // Cambia a tu color deseado

            const celdas = fila.getElementsByTagName('td');

            

            for (let i = 0; i < celdas.length; i++) {

            //para omitir el primero td inicializamos en 1 y para el ultimo length-1

            //for (let i = 1; i < celdas.length-1; i++) {

            if(celdas[i].style.backgroundColor!=''){

                celdas[i].style.backgroundColor = generarColorPastel(combinarColores(celdas[i].style.backgroundColor, color));

            }else{

                celdas[i].style.backgroundColor = generarColorPastel(color);    

            }

            var contraste = obtenerContraste(color);

            if (contraste > 128) {

                celdas[i].style.color = '#000'; // Texto en negro para fondos claros

            } else {

                celdas[i].style.color = '#fff'; // Texto en blanco para fondos oscuros

            }

               // celdas[i].style.backgroundColor = input_color.value; // Cambia a tu color deseado

            }

        }

        var configuracion = { row: idtupla, color: color };

         // Puedes implementar la lógica para guardar la configuración en un archivo en el servidor

        $.ajax({

            url: '../bussines/configuracion_colores_tabla.php',

            type: 'POST',

            data: { action:'guardar_color_fila',configuracion: configuracion },

            success: function () {

                console.log('Configuración guardada.');

            }

        });

    }



    /*termina codigo, para colorear columna*/

    /*agregamos script para cargar los colores de la tabla**/

    

        function cargarColoresTabla() {

        // Puedes implementar la lógica para cargar la configuración desde un archivo en el servidor

        $.ajax({

            url: '../bussines/configuracion_colores_tabla.php',

            type: 'GET',

            data: { action:'cargar_color_columna'},

            success: function (data) {

                if (data && data.trim() !== '') {

                    var configuracion = JSON.parse(data);

                    for (var i = 0; i < configuracion.length; i++) {

                        var infoCelda = configuracion[i];

                        colorearColumnaByMenuContextLoad(infoCelda.column,generarColorPastel(infoCelda.color));

                    }

                }

            }

        });

        $.ajax({

            url: '../bussines/configuracion_colores_tabla.php',

            type: 'GET',

            data: { action:'cargar_color_fila'},

            success: function (data) {

                if (data && data.trim() !== '') {

                    var configuracion = JSON.parse(data);

                    for (var i = 0; i < configuracion.length; i++) {

                        var infoRow = configuracion[i];

                       colorearRowByMenuContextLoad(infoRow.row,generarColorPastel(infoRow.color));

                    }

                }

            }

        });

    }

    /*termina script para cargar los colores de la tabla*/