//DEVELOP
const PATH_GENERAL = 'http://localhost:7070/Asistencia/';
const PATH_IP = 'http://172.16.2.102:7070/Asistencia/';
//PRODUCCION
const PATH_DOMAIN = '';
const CODIGO_PROYECTO_ASISTENCIA = '7';
//const PATH_SERVICIO_REST = 'http://172.16.2.53:8080/security-rest/api/'//'http://app8.sacooliveros.edu.pe:8080/security-rest/api/';
const PATH_SERVICIO_REST = 'http://app9.sacooliveros.edu.pe:8080/security-rest/api/';


//<editor-fold> SERVICIOS REST

//<editor-fold> MODULO DE POLICIAS
const URI_TIPOROL_POLICIA = "http://172.16.2.91:666/tipoRolPolicias";
const URI_FRECUENCIA_ROL_POLICIA = "http://172.16.2.91:666/frecuenciaRolPolicias";
const URI_SEDES = "http://172.16.2.91:666/sedes";
const URI_ESTADO_ASISTENCIA = "http://172.16.2.91:666/estadoAsistencia";
const URI_POLICIAS = "http://172.16.2.91:666/policias";
const URI_ROL_POLICIA = "http://172.16.2.91:666/rolesPolicias";
const URI_POLICIAS_ASISTENCIA = "http://sistem16:666/asistenciaPolicias";
//</editor-fold>


//</editor-fold>

/*Ajax genral*/
const ajaxRequestSendBody = obj => {
    let body = JSON.stringify(obj.body);
    return new Promise((resolve, reject) => {
        $.ajax({
            url: obj.url,
            type: obj.type,
            headers: obj.headers,
            data: {body: body},
            beforeSend: (xhr, settings) => {
            }, success: (response, textStatus, jqXHR) => {
                resolve(response)
            }, error: (jqXHR, textStatus, errorThrown) => {
                reject({
                    status: jqXHR.status,
                    throw: errorThrown || {},
                    jqXHR: jqXHR,
                    request: obj
                })
            }
        })
    })
}
/*Ajax General*/
/*Ajax genral*/
const ajaxRequestGeneral = obj => {
    let body = JSON.stringify(obj.body);
    return new Promise((resolve, reject) => {
        $.ajax({
            url: obj.url,
            type: obj.type,
            headers: obj.headers,
            data: {body: body},
            beforeSend: (xhr, settings) => {
            }, success: (response, textStatus, jqXHR) => {
                resolve(response)
            }, error: (jqXHR, textStatus, errorThrown) => {
                reject({
                    status: jqXHR.status,
                    throw: errorThrown || {},
                    jqXHR: jqXHR,
                    request: obj
                })
            }
        })
    })
}
let createSelectOptions = (obj, valueName, textName) => {
    let options = ''
    obj.forEach((data) => {
        options += `<option value="${data[valueName]}">${data[textName]}</option>`
    })
    return options
}

let customSwal = {
    alert(title, text, type) {
        let colors = {
            success: '#66BB6A',
            error: '#EF5350',
            warning: '#FF7043'
        }
        let btnColor = colors[type]
        return new Promise((resolve, reject) => {
            swal({
                title: title,
                text: text,
                confirmButtonColor: btnColor,
                type: type
            }, (isConfirm) => {
                resolve()
            })
        })
    }
}

/**
 * Get the closest matching element up the DOM tree.
 * @private
 * @param  {Element} elem     Starting element
 * @param  {String}  selector Selector to match against
 * @return {Boolean|Element}  Returns null if not match found
 */
let getClosest = (elem, selector) => {

    // Element.matches() polyfill
    if (!Element.prototype.matches) {
        Element.prototype.matches =
                Element.prototype.matchesSelector ||
                Element.prototype.mozMatchesSelector ||
                Element.prototype.msMatchesSelector ||
                Element.prototype.oMatchesSelector ||
                Element.prototype.webkitMatchesSelector ||
                function (s) {
                    var matches = (this.document || this.ownerDocument).querySelectorAll(s),
                            i = matches.length
                    while (--i >= 0 && matches.item(i) !== this) {
                    }
                    return i > -1
                }
    }
    // Get closest match
    for (; elem && elem !== document; elem = elem.parentNode) {
        if (elem.matches(selector))
            return elem
    }
    return null
}
let block = () => {
    $.blockUI({
        message: '<i class="icon-spinner4 spinner"></i>',
        timeout: 2000, //unblock after 2 seconds
        overlayCSS: {
            backgroundColor: '#1b2024',
            opacity: 0.8,
            cursor: 'wait'
        },
        css: {
            border: 0,
            color: '#fff',
            padding: 0,
            backgroundColor: 'transparent'
        }
    });
}
//let logOut = () =>{
//    document.querySelector('#logOut').addEventListener('click', (e) => {
//        window.location.href = 'http://172.16.2.53:8080/proyecto-estandar/vistas/logout'
//    })
//}
//logOut();

//let logOut = () => {
//    $('.logOut').click(function () {
//        console.log("redireccionando")
//        window.location.href = CONSTANTES.PATH_IP + 'vistas/logout';
//    })
//}

let logOut = () => {
    document.querySelector('#logOut').addEventListener('click', (e) => {
        window.location.href = '../vistas/logout';
    });
};


function defaultConfigDataTable() {
    $.extend($.fn.dataTable.defaults, {
        bSort: false,
        bFilter: false,
        aaSorting: [],
        ordering: false,
        bLengthChange: false,
        bInfo: true,
        paging: true,
        iDisplayLength: 20,
        bStateSave: false,
        autoWidth: false,
        responsive: true,
        stateSave: true,
        language: {
            lengthMenu: "Mostrar: _MENU_",
            zeroRecords: "&nbsp;&nbsp;&nbsp; No se encontraron resultados",
            info: "&nbsp;&nbsp;&nbsp; Mostrando del _START_ al _END_ de un total de _TOTAL_ registros",
            infoEmpty: "&nbsp;&nbsp;&nbsp; Mostrando 0 de 0 registros",
            search: "Filtrar:",
            loadingRecords: "Cargando...",
            processing: '<span style="width:100%;"><img src="http://www.snacklocal.com/images/ajaxload.gif"></span>',
            paginate: {
                first: "First",
                last: "Last",
                next: "Siguiente",
                previous: "Anterior"
            }
        }
    });
}



function defaultConfigDatePicker() {
    $('.datepicker').datepicker({
        dateFormat: 'dd/mm/yy',
        showButtonPanel: true,
        changeMonth: true,
        changeYear: true,
        minDate: '-4Y',
        maxDate: '+1Y',
        inline: true
    });

    $.datepicker.regional['es'] = {
        closeText: 'Cerrar',
        prevText: '<Ant',
        nextText: 'Sig>',
        currentText: 'Hoy',
        monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Setiembre', 'Octubre', 'Noviembre', 'Diciembre'],
        monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
        dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],
        dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sáb'],
        dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'],
        weekHeader: 'Sm',
        dateFormat: 'dd/mm/yy',
        firstDay: 1,
        isRTL: false,
        showMonthAfterYear: false,
        yearSuffix: ''
    };
    $.datepicker.setDefaults($.datepicker.regional['es']);
    ;
}


//function defaultConfigDateRangePicker() {
//    $('.daterange-basic').daterangepicker({
//        applyClass: 'bg-slate-600',
////        "singleDatePicker": true,
//        cancelClass: 'btn-default',
////        showDropdowns: false,
////        timePicker: true,
////        opens: 'center',
////        singleDatePicker: true,
//        autoApply: true,
//        locale: {
//            format: 'DD/MM/YYYY'
//        }
//    });
////    $('.calendar.right').hide();
//}




(function (a) {
    a.fn.validCampo = function (b) {
        a(this).on({keypress: function (a) {
                var c = a.which, d = a.keyCode, e = String.fromCharCode(c).toLowerCase(), f = b;
                (-1 != f.indexOf(e) || 9 == d || 37 != c && 37 == d || 39 == d && 39 != c || 8 == d || 46 == d && 46 != c) && 161 != c || a.preventDefault()
            }})
    }
})(jQuery);


function primeraLetraMayuscula(str) {
    let strLower = str.toLowerCase();
    let caracter = strLower.substr(0, 1).toUpperCase();
    let cadena = caracter + strLower.substr(1);
    return cadena;
}



const makeDatatable = (jsonForDatatable = { data: [], columns: [], columnDefs: [], wrapsNameDatatable: ``, classNameForDatatable: ``, footer: false, highlighting: true}) => {
    let data = jsonForDatatable.data;
    let columns = jsonForDatatable.columns;
    let columnDefs = jsonForDatatable.columns;

    let wrapsNameDatatable = jsonForDatatable.wrapsNameDatatable
    let nameDatatable = `${wrapsNameDatatable}-datatable`
    let classNameForDatatable = jsonForDatatable.classNameForDatatable

    let highlighting = jsonForDatatable.highlighting

    let table_head = `
		<table id="${nameDatatable}" class="${classNameForDatatable} table-hover" cellspacing="0" width="100%">`;

    let table_head_th = `
		<thead>
			<tr>`;
    columns.forEach((obj) => {
        let title = `undefined`;
        if (obj.title) {
            title = obj.title;
        } else if (obj.data) {
            title = obj.data;
        }
        table_head_th += `
			<th>${title}</th>`
    })
    table_head_th += `
			</tr>
		</thead>`

    let table_foot_th = ``;
    if (jsonForDatatable.footer) {
        table_foot_th = `
			<tfoot>
				<tr>`;
        columns.forEach((obj) => {
            let title = `undefined`;
            if (obj.title) {
                title = obj.title;
            } else if (obj.data) {
                title = obj.data;
            }
            table_foot_th += `
				<th>${title}</th>`
        })
        table_foot_th += `
				</tr>
			</tfoot>
		`
    }

    let table_foot = `</table>`

    $(`#${wrapsNameDatatable}`).empty().append(`${table_head}${table_head_th}${table_foot_th}${table_foot}`);
    $(`#${nameDatatable}`)
            .DataTable({
                data,
                columns,
                columnDefs
            });

    if (highlighting) {
        let table = $(`#${nameDatatable}`).DataTable();

        $(`#${nameDatatable} tbody`)
                .on('mouseenter', 'td', function () {
                    let colIdx = table.cell(this).index().column;

                    $(table.cells().nodes()).removeClass('highlight');
                    $(table.column(colIdx).nodes()).addClass('highlight');
                });
    }

    return Promise.resolve($(`#${nameDatatable}`));
}



const randomIntFromInterval = (minimum, maximum) => {
    return Math.round(Math.random() * (maximum - minimum) + minimum);
}

function formatResponse(resultAxios) {
    return {
        status: resultAxios.data.status || true,
        message: resultAxios.data.message || `Operación exitosa`,
        data: resultAxios.data.data || resultAxios.data
    };
}

const cleanQueryParams = (params = {}) => {
    for (var key in params) {
        if (params.hasOwnProperty(key)) {
            if (!params[key]) {
                delete params[key];
            }
        }
    }

    return params;
}