import moment from "moment";
import format from "date-fns/format";
import $ from "jquery";
import download from "downloadjs";
export const downloadMixin = {
    data() {
        return {
            buscar: "",
            downloadingFile: false,
            idLoadingImage: null,
            downloadedItem: [],
            toastCollapse: false
        }
    },
    methods: {
        slug: function (str) {
            str = str.replace(/^\s+|\s+$/g, ""); // trim
            str = str.toLowerCase();
            // remove accents, swap ñ for n, etc
            var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
            var to = "aaaaeeeeiiiioooouuuunc------";
            for (var i = 0, l = from.length; i < l; i++) {
                str = str.replace(new RegExp(from.charAt(i), "g"), to.charAt(i));
            }
            str = str
                .replace(/[^a-z0-9 -]/g, "") // remove invalid chars
                .replace(/\s+/g, "-") // collapse whitespace and replace by -
                .replace(/-+/g, "-"); // collapse dashes

            return str;
        },
        sendLogDescargarArchivo(datos) {
            return this.$http
                .post(this.url_api + "/archivo/descarga", datos, this.config_header)
                .then(response => {
                    if (response.data.response) {
                        // log insertado correctamente
                    } else {
                        // error
                    }
                })
                .catch(error => {
                    this.strError =
                        "Se ha producido un error al tratar de insertar el log de descarga, error: " + error;
                });
        },
        downloadFile: function (idar, nom) {
            this.downloadingFile = true;
            this.launchToast(true);
            this.downloadedItem.push({
                idItem: idar,
                nombre: nom,
                loading: true
            });
            this.$http
                .get(this.url_api + /archivo/ + idar, this.config_header)
                .then(response => {
                    if (response.data.data) {
                        this.getFile(
                            response.data.data,
                            response.data.mime,
                            response.data.name
                        );
                        // completamos del toast cargando...
                        let index = this.downloadedItem.findIndex(item => {
                            return item.idItem === idar;
                        });
                        this.downloadedItem[index].loading = false;
                        this.downloadingFile = false;
                        
                        // Datos log
                        let datosLog = {
                            'IDAR': idar,
                            'IDUS': this.$store.getters.user.id,
                            'DISP': 'WEB'
                        }
                        this.sendLogDescargarArchivo(datosLog);
                    } else {
                        this.strError = response.data.message;
                    }
                })
                .catch(error => {
                    this.strError = error;
                });
        },
        getFile: function (data, mime, name) {
            // Transformar el bs64 a un archivo
            var byteCharacters = atob(data);
            var byteNumbers = new Array(byteCharacters.length);
            for (var i = 0; i < byteCharacters.length; i++) {
                byteNumbers[i] = byteCharacters.charCodeAt(i);
            }
            var byteArray = new Uint8Array(byteNumbers);
            var blob = new Blob([byteArray], { type: mime });

            return download(blob, name, mime);
        },
        launchToast: function (show) {
            $(".collapse").collapse();
            var x = document.getElementById("toastNew");
            if (show) {
                x.className += " animated fadeIn";
                $(".toast").toast("show");
            } else {
                setTimeout(function () {
                    $(".toast").toast("hide");
                }, 300);
            }
        },
        scrollBottom() {
            //Ajustar el scroll
            var scrollingElement = document.scrollingElement || document.body;
            $(scrollingElement).animate(
                {
                    scrollTop: $("#divSecciones").position().top
                },
                1000
            );
        },
        filtrarFecha(tipo) {
            // Filtramos dependiendo del tipo
            var filtrarFecha = [];
            switch (tipo) {
                case 'est':
                    filtrarFecha = this.estantesPermitidos;
                    break;
                case 'sec':
                    filtrarFecha = this.seccionesFilter;
                    break;
                case 'cate':
                    filtrarFecha = this.categoriaFilter;
                    break;
                default:
                    filtrarFecha = this.archivosFilter;
                    break;
            }

            return filtrarFecha.filter(dato => {
                let fechaFormato = moment(dato.FECR, "DD-MMM-YY").format("YYYY-MM-DD");
                // hacemos busqueda entre fechas
                if(!(moment(fechaFormato).isBefore( this.filtroFecha.fechaInicial ) || 
                moment(fechaFormato).isAfter( this.filtroFecha.fechaFinal ) ) )
                {
                    return dato;
                }
                // si no tenemos fechas retornamos mismos datos
                if (
                    this.filtroFecha.fechaInicial === "" &&
                    this.filtroFecha.fechaFinal === ""
                ) {
                    return dato;
                }                
               
            });
          
        }
    },
    filters: {
        capitalize: function (value) {
            if (!value) return "";
            value = value.toString();
            return value.charAt(0).toUpperCase() + value.slice(1);
        }
    }
}

