var btnContentHtml = "";
let isLoading = false;

!function ($) {
    "use strict";

    window.funciones = {
        //PARAMETROS GENERALES DEL SISTEMA
        imagenVacia: 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==',

        //FUNCIONES DEL SISTEMA
        obtenerTipoMIME: function (cabecera) {
            return cabecera.replace(/data:([^;]+).*/, '\$1');
        },
        mostrarVistaPrevia: function (file) {
            var msg = $(file).parent().parent().parent().find('.txt-img');
            var img = $(file).parent().parent().parent().find('img');
            var input = $(file).parent().find('input[type=hidden]');

            var Archivos, Lector;
            if (typeof FileReader !== "function") {
                jQuery(msg).text('(su navegador no soporta vista previa!)');
                return;
            }
            Archivos = jQuery(file)[0].files;
            if (Archivos.length > 0) {

                Lector = new FileReader();
                Lector.onloadend = function (e) {
                    var origen, tipo;

                    //Envia la imagen a la pantalla
                    origen = e.target; //objeto FileReader
                    //Prepara la información sobre la imagen
                    tipo = arguz.obtenerTipoMIME(origen.result.substring(0, 30));

                    jQuery(msg).text(Archivos[0].name + ' (Tipo: ' + tipo + ') Tamaño: ' + e.total + ' bytes');
                    //Si el tipo de archivo es válido lo muestra,
                    //sino muestra un mensaje
                    if (tipo !== 'image/jpeg' && tipo !== 'image/png' && tipo !== 'image/gif' && tipo !== 'image/svg+xml') {
                        jQuery(img).attr('src', arguz.imagenVacia);
                        $(input).val('-');
                        alert('El formato de imagen no es válido: debe seleccionar una imagen JPG, PNG o GIF.');
                    } else {
                        jQuery(img).attr('src', origen.result).attr('width', "100%");
                        $(input).val(origen.result);
//                                window.obtenerMedidas();
                    }

                };
                Lector.onerror = function (e) {
                    console.log(e);
                };
                Lector.readAsDataURL(Archivos[0]);

            } else {
                var objeto = jQuery(file);
                objeto.replaceWith(objeto.val('').clone());
                jQuery(img).attr('src', arguz.imagenVacia);
                jQuery(msg).text('[Seleccione una imagen]');
            }
            ;
        },

        bloquearFrm: function (frm, estado, limpiar) {
            if (limpiar === undefined) {
                limpiar = false;
            }
            if (limpiar) {
                $(frm).find('input, textarea').val('');
            }
        },

        keySoloNumeros: function (e) {
            var tecla = (document.all) ? e.keyCode : e.which;
            //Tecla de retroceso para borrar, siempre la permite
            if (tecla == 8) {
                return true;
            }

            // Patron de entrada, en este caso solo acepta numeros
            var patron = /[0-9]/;
            var tecla_final = String.fromCharCode(tecla);
            return patron.test(tecla_final);
        },
        baseUrl: function () {
            return $('#base_url').val();
        },
        jsonToList: function (json) {

            var html = "<ul>";

            $.each(json, function (k, y) {
                $.each(y, function (idx, obj) {

                    var ind = k.indexOf('_');
                    var txt = k.substring(0, ind);

                    html = html + "<li>";
                    html = html + obj.replace(txt, '');
                    html = html + "</li>";
                });
            });

            html = html + "</ul>";
            return html;
        },
        asignarValoresForm: function (frm, datos) {
            $.each(datos, function (idx, value) {

                if($(frm).find('#' + idx).attr('type') != 'file'){
                    $(frm).find('#' + idx).val(value);
                }

            });
        },
        getNombreDia: function (fecha) {
            let _fecha =new Date(fecha);
            let days = ['Lunes','Martes','Miércoles', 'Jueves', 'Viernes', 'Sábado', 'Domingo'];
            return days[_fecha.getUTCDay()-1];
        },
        convertFecha: function (fecha) {
            var resFecha = '';
            var resHora = '';
            var temp;

            if(fecha == undefined || fecha == ''){
                return '';
            }

            if (fecha.length > 10) {//ES FECHA Y HORA
                temp = fecha.split(' ');
                if (temp.length == 2) {

                    resFecha = $.trim(temp[0]);
                    resHora = $.trim(temp[1]);

                    if (resFecha.length != 10) {
                        return fecha;
                    }
                } else {
                    return fecha;
                }
            } else {
                if (fecha.length == 10) {//ES SOLO FECHA
                    resFecha = fecha;
                } else {
                    return fecha;
                }
            }

            //VERIFICAMOS EL FORMATO
            if (resFecha.search("-") >= 0) {
                temp = resFecha.split('-');
                if (temp.length == 3 && temp[0].length == 4) {
                    resFecha = temp[2] + '/' + temp[1] + '/' + temp[0];
                } else {
                    return fecha;
                }
            } else {
                if (resFecha.search("/") >= 0) {
                    temp = resFecha.split('/');
                    if (temp.length == 3 && temp[2].length == 4) {
                        resFecha = temp[2] + '-' + temp[1] + '-' + temp[0];
                    } else {
                        return fecha;
                    }
                } else {
                    return fecha;
                }
            }

            return $.trim(resFecha + ' ' + resHora);
        },
        formatoNumero: function (numero, decimales, separador_decimal, separador_miles) { // v2007-08-06
            numero = parseFloat(numero);

            if (isNaN(numero)) {
                return numero;
            }

            if (decimales !== undefined) {
                numero = numero.toFixed(decimales);
            }

            numero = numero.toString().replace(",", separador_decimal !== undefined ? separador_decimal : ".");

            if (separador_miles) {
                // Añadimos los separadores de miles
                var miles = new RegExp("(-?[0-9]+)([0-9]{3})");
                while (miles.test(numero)) {
                    numero = numero.replace(miles, "$1" + separador_miles + "$2");
                }
            }

            return numero;
        },
        showHideButtonLoading(button,whiText = true) {
            if($(button).attr('loading')=='true'){
                $(button).html(btnContentHtml);
                $(button).removeAttr('loading');
                $(button).removeAttr('disabled');
                btnContentHtml = "";
            }else{
                btnContentHtml = $(button).html();
                $(button).attr('loading',true);
                $(button).attr('disabled',true);
                var html = '<span class="spinner-border spinner-border-sm" aria-hidden="true"></span>';
                if(whiText){
                    html = html + '<span role="status">Procesando...</span>';
                }
                $(button).html(html);
            }
        },
        showMensajeByResponse(element, response) {
            var typeMessage = "alert-warning";
            var mensaje = "-";

            $(element).find('.lblMensajes').remove();

            if($.type(response) == 'string'){
                response = JSON.parse(response);
            }

            if(response.status === 0){ // ERROR
                typeMessage = "alert-danger";

                if(response.error != undefined){
                    mensaje = "<ul>"
                    $.each(response.error,function(text){
                        var ind = text.indexOf('_');
                        var txt = text.substring(0, ind + 1);
                        mensaje =  mensaje + "<li><b>" + text.replace(txt, '') + ": </b>" + response.error[text] + "</li>"
                    });
                    mensaje = mensaje + "</ul>"
                    //mensaje = jazba.jsonToList(response.error);
                }else{
                    mensaje = response.msg;
                }

            }else{ // CORRECTO
                typeMessage = "alert-success";
                mensaje = response.msg;
            }
            var alert = '<div class="alert ' + typeMessage + ' alert-dismissible fade show lblMensajes" role="alert">' + mensaje + '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button></div>';
            $(element).prepend(alert);

            setTimeout(function(){
                $('.lblMensajes').find('button').click();
            }, 2000);

            return typeMessage == "alert-success";
        },
        modalType(mdl,tipe){
            $(mdl).find('.modal-header').removeClass('bg-success');
            $(mdl).find('.modal-header').removeClass('bg-warning');
            $(mdl).find('.modal-header').removeClass('bg-danger');
            $(mdl).find('.modal-header').find('.modal-title').removeClass('text-white');
            if(tipe == 'success'){
                $(mdl).find('.modal-header').addClass('bg-success');
                $(mdl).find('.modal-header').find('.modal-title').addClass('text-white');
            }else{
                if(tipe == 'info'){
                    $(mdl).find('.modal-header').addClass('bg-info');
                    $(mdl).find('.modal-header').find('.modal-title').addClass('text-white');
                }else {
                    $(mdl).find('.modal-header').addClass('bg-warning');
                    $(mdl).find('.modal-header').find('.modal-title').addClass('text-white');
                }
            }
        },
        setupTooltip(){
            var tooltips = document.querySelectorAll('[data-bs-toggle="tooltip"]');
            tooltips.forEach(function (tooltip) {
                new bootstrap.Tooltip(tooltip);
            });
        },
        getSizeFile(bites){
            const units = [
                "B",
                "KB",
                "MB",
                "GB",
                "TB",
                "PB",
                "EB",
                "ZB",
                "YB",
            ];
            const exponent = Math.min(
                Math.floor(Math.log(bites) / Math.log(1024)),
                units.length - 1,
            );
            const approx = bites / 1024 ** exponent;
            return approx.toFixed(3) + ' ' + units[exponent];
        },
        loading(){
            let html = '<div class="container-ldg"><div class="cargando-ldg"><div class="pelotas-ldg"></div><div class="pelotas-ldg"></div><div class="pelotas-ldg"></div><span class="texto-cargando-ldg">Cargando...</span></div></div>';
            if(isLoading){
                $('body .container-ldg').remove();
                $('body').removeClass('no-scroll');
                isLoading = false;
            }else{
                $('body').addClass('no-scroll');
                $('body').append(html);
                isLoading = true;
            }
        }
    };

}(jQuery);

$( document ).ready(function() {
    alertify.set('notifier','position', 'top-right');
    $.fn.modal.Constructor.prototype._enforceFocus = function() {};
});