jQuery(document).ready(function () {

    init_healt_check();

    // ДЛЯ СПИСКОВ ТАБЛИЦЫ
    jQuery(document).find('[data-event="big-list"]').click(function () {
        jQuery(this).closest('.big-list').toggleClass('closed');
    });

    nifty_table_selected_checkboxes();

    checked_ajax_init();

    var switches = jQuery('.sw-checked');
    switches.each(function () {
        init_switchery(this);
    });


    jQuery('.mainnav-toggle').click(function () {
        if (jQuery('#container').hasClass('mainnav-lg')) {
            jQuery.cookie('leftmenu', 'expanded', {expires: 1, path: '/'});
        } else {
            jQuery.cookie('leftmenu', 'collapsed', {expires: 1, path: '/'});
        }
    });


    jQuery('.nifty-table tbody input[type=checkbox]').click(function () {
        if (jQuery(this).is(':checked')) {
            jQuery(this).parents('tr').addClass('selected');
        } else {
            jQuery(this).parents('tr').removeClass('selected');
        }
    });


    jQuery('#check-all-head').click(function () {
        let parentTable = jQuery(this).parents('table');
        var ch = parentTable.find('.select-row-check');
        if (jQuery(this).is(':checked')) {

            //check all rows in table
            ch.each(function () {
                jQuery(this).prop('checked', true);
                jQuery(this).parent().addClass('checked');	//used for the custom checkbox style
                jQuery(this).parents('tr').addClass('selected');
            });

            //check both table header and footer
            parentTable.find('.checkall').each(function () {
                jQuery(this).prop('checked', true);
            });

        } else {
            //uncheck all rows in table
            ch.each(function () {
                jQuery(this).prop('checked', false);
                jQuery(this).parent().removeClass('checked');	//used for the custom checkbox style
                jQuery(this).parents('tr').removeClass('selected');
            });
        }
    });

});

function dd(par1, par2, par3) {
    if (par1 && par2 && par3) {
        console.log(par1, par2, par3)
    } else if (par1 && par2) {
        console.log(par1, par2)
    } else {
        console.log(par1)
    }
}

function requestHealthCheck(){
    jQuery.ajax({
        type: "GET",
        url: '/_service/diamond/system/helthcheck',
        success: function (optionsData) {

            if(optionsData.status === 'timeout'){
                bootbox.confirm({
                    message: 'Время сессии истекло, продолжить работу?',
                    buttons: {
                        confirm: {
                            label: 'Да',
                            className: 'btn-success'
                        },
                        cancel: {
                            label: 'Нет',
                            className: 'btn-danger'
                        }
                    },
                    callback: function (r) {

                        if(r===true){
                            //@todo добавить возможность оживить сессию или создать новую через ajax запрос
                            // jQuery.ajax({
                            //     type: "PUT",
                            //     url: '/_service/diamond/system/refresh-authorization',
                            //     success: function (optionsData) {
                            //
                            //
                            //
                            //     }
                            // }).fail(function () {
                            //     notify_danger('Не соедениться с сервером, ошибка сервера');
                            // });
                        }
                        else{
                            location.reload();
                        }

                    }
                });
            }
            else if(optionsData.status === 'ok')
            {
                init_healt_check();
            }


        }
    }).fail(function () {
        notify_danger('Не соедениться с сервером, ошибка сервера');
    });

}


function init_healt_check(){
    setTimeout(function tick() {
        requestHealthCheck()
    }, 60*1000);
}

function checked_ajax_init(switchesAjax){

    if(!switchesAjax){
        var switchesAjax = jQuery('.sw-checked-ajax');
    }

    switchesAjax.each(function () {

        this.onchange = function () {

            let request = jQuery(this).data('checked-ajax');

            if (request) {
                jQuery.ajax({
                    type: "PUT",
                    url: '/_service/diamond/admin/checked',
                    data: {
                        'data': request,
                        'checked': jQuery(this).is(':checked')
                    },
                    success: function (optionsData) {
                        notify_success('Успешно изменено');
                    }
                }).fail(function () {
                    notify_danger('Не удалось изменить, ошибка сервера');
                });
            }
        };

        //стилизация переключалки
        init_switchery(this);
    });
}

function init_switchery(ob){
    var params = {
        //disabled: true
    }
    if(jQuery(ob).data('color')){
        params.color = jQuery(ob).data('color');
    }

    let el = new Switchery(ob, params);
}

function nifty_table_selected_checkboxes() {
    var ch = jQuery('.select-row-check');
    ch.each(function () {
        if (jQuery(this).is(':checked')) {
            jQuery(this).parent().addClass('checked');
            jQuery(this).parents('tr').addClass('selected');
        }
    });
}

function get_selected_checkboxes() {
    let ids = '';

    jQuery.each(jQuery('.nifty-table input:checkbox:checked'), function (i, el) {
        if (el.value > 0) {
            ids += el.value + ','
        }
    });

    return ids;
}


function action_row(id, actionName, confirmText) {

    bootbox.confirm({
        message: confirmText,
        size: (confirmText.length > 50 ? "midle": 'small'),
        buttons: {
            confirm: {
                label: 'Да',
                className: 'btn-success'
            },
            cancel: {
                label: 'Нет',
                className: 'btn-default'
            }
        },
        callback: function (r) {
            if (r === true) {
                let form = jQuery('form[name=action-selected-rows]');
                form.find('input[name=ids]').val(id);

                let action = form.find('select[name=actiontype]');

                if (action.length > 0) {
                    action.val(actionName);
                } else {
                    form.find('input[name=actiontype]').val(actionName);
                }

                form.submit();
            }
        }
    });

}

function notify_success(txt) {
    jQuery.niftyNoty({
        type: 'success',
        icon: 'pli-like-2 icon-2x',
        message: txt,
        container: 'floating',
        timer: 5000
    });
}


function notify_danger(txt) {
    jQuery.niftyNoty({
        type: 'danger',
        icon: 'pli-like-2 icon-2x',
        message: txt,
        container: 'floating',
        timer: 15000
    });
}

function action_rows(form_id, actionName, confirmText = 'Подтверждаете выбранное действие?') {
    let form = jQuery('#action-' + form_id);
    form.find('input[name=actiontype]').val(actionName);
    form_action(form, confirmText);
}


function form_action(form, confirmText) {

    let ids = get_selected_checkboxes();

    if (jQuery(form).find('input[name=ids]').val() > '') {
        return true;
    }

    if (ids.length === 0) {
        bootbox.alert({
            message: "Не выбраны записи",
            size: "small",
        });
        return false;
    }

    if (jQuery(form).find('[name=actiontype]').val() === '') {

        bootbox.alert({
            message: "Не выбрано действие",
            size: "small",
        });
        return false;
    }

    bootbox.confirm({
        message: confirmText,
        buttons: {
            confirm: {
                label: 'Да',
                className: 'btn-success'
            },
            cancel: {
                label: 'Нет',
                className: 'btn-danger'
            }
        },
        callback: function (r) {

            if (r === true) {
                jQuery(form).find('input[name=ids]').val(ids);
                //alert(1);
                jQuery(form).submit();
                console.log(r, form)
            }
        }
    });

    return false;
}

function filter_show(ob) {
    if (jQuery('.table-filter').is(':visible')) {
        jQuery('.table-filter').hide();
        jQuery('.filter-controls').addClass('hidden');
        jQuery(ob).removeClass('btn-warning');
        jQuery(ob).addClass('btn-default');
    } else {
        jQuery('.table-filter').show();
        jQuery(ob).removeClass('btn-default');
        jQuery(ob).addClass('btn-warning');
        jQuery('.filter-controls').removeClass('hidden');
    }
}

function selectValueInWindow(ob, control, value, called) {

    jQuery(ob).find('input[name=' + control + ']').val(value);
    jQuery(ob).find('input[name=' + control + '_caption]').val(called.value);
    window.close()
}


function explode(delimiter, string) {

    var emptyArray = {0: ''};

    if (arguments.length != 2
        || typeof arguments[0] == 'undefined'
        || typeof arguments[1] == 'undefined') {
        return null;
    }

    if (delimiter === ''
        || delimiter === false
        || delimiter === null) {
        return false;
    }

    if (typeof delimiter == 'function'
        || typeof delimiter == 'object'
        || typeof string == 'function'
        || typeof string == 'object') {
        return emptyArray;
    }

    if (delimiter === true) {
        delimiter = '1';
    }

    return string.toString().split(delimiter.toString());
}


//для partscanner
function selectPriceListInWindow(ob, control, value, called) {
    let val = jQuery(ob).find('input[name=' + control + ']').val();
    jQuery(ob).find('input[name=' + control + ']').val(val + ',' + value);
    jQuery(ob).find('input[name=' + control + ']').change();
    window.close();
}

//для partscanner
function setValueDataReplace(ob, control, value, called) {
    jQuery(ob).find('input[name=' + control + ']').val(value);
    jQuery(ob).find('input[name=' + control + ']').change();
    window.opener.reloadDataReplaces();
    window.close();
}

function setValueDatFilter(ob, control, value, called) {
    jQuery(ob).find('input[name=' + control + ']').val(value);
    jQuery(ob).find('input[name=' + control + ']').change();
    window.opener.reloadDataReplaces();
    window.close();
}

function setValueExportFiles(ob, control, value, called) {
    jQuery(ob).find('input[name=' + control + ']').val(value);
    jQuery(ob).find('input[name=' + control + ']').change();
    window.opener.reloadDataExport();
    window.close();
}

function setValueSources(ob, control, value, called) {
    jQuery(ob).find('input[name=' + control + ']').val(value);
    jQuery(ob).find('input[name=' + control + ']').change();
    window.opener.reloadDataExport();
    window.close();
}

function select_city(o, city, empty) {

    select_ajax(o, city, empty, "/_service/shop/cities?region=");
}

/**
 *
 * @param {type} o
 * @param {type} region
 * @param {type} empty
 * @returns {undefined}
 */
function select_region(o, region, empty, phonemask) {

    select_ajax(o, region, empty, "/_service/shop/regions?country=");


    if(window.masks !== undefined && masks[o.value]){
        jQuery(phonemask).mask(masks[o.value]);
        //console.log(masks[o.value]);
    }

}

/**
 *
 * @param {type} o
 * @param {type} cty_id
 * @param {type} empty
 * @param {type} url
 * @returns {undefined}
 */
function select_ajax(o, cty_id, empty, url) {

    cty_id = cty_id || 'cty_id';
    empty = empty || '0';

    jQuery.ajax({
        type: "GET",
        url: url + o.value,
        data: {
            name: cty_id,
            empty: empty
        },
        success: function (optionsData) {

            let obj =  jQuery('select[name=' + cty_id + '] option');

            obj.remove();
            jQuery.each(optionsData, function () {

                jQuery('select[name=' + cty_id + ']').append(
                    jQuery('<option />')
                        .text(this.value)
                        .val(this.id)
                );
            });

            jQuery('select[name=' + cty_id + ']').trigger("chosen:updated");
        }
    });
}