/**
 * @author: Alec Fenichel
 * @webSite: https://fenichelar.com
 * @version: v1.0.0
 */

(function ($) {

    'use strict';

    $.extend($.fn.bootstrapTable.defaults, {
        autoRefresh: false,
        autoRefreshInterval: 60,
        autoRefreshSilent: true,
        autoRefreshStatus: true,
        autoRefreshFunction: null
    });

    $.extend($.fn.bootstrapTable.defaults.icons, {
        autoRefresh: 'glyphicon-time icon-time'
    });

    $.extend($.fn.bootstrapTable.locales, {
        formatAutoRefresh: function() {
            return 'Auto Refresh';
        }
    });

    $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);

    var BootstrapTable = $.fn.bootstrapTable.Constructor;
    var _init = BootstrapTable.prototype.init;
    var _initToolbar = BootstrapTable.prototype.initToolbar;
    var sprintf = $.fn.bootstrapTable.utils.sprintf;

    BootstrapTable.prototype.init = function () {
        _init.apply(this, Array.prototype.slice.apply(arguments));

        if (this.options.autoRefresh && this.options.autoRefreshStatus) {
            var that = this;
            this.options.autoRefreshFunction = setInterval(function () {
                that.refresh({silent: that.options.autoRefreshSilent});
            }, this.options.autoRefreshInterval*1000);
        }
    };

    BootstrapTable.prototype.initToolbar = function() {
        _initToolbar.apply(this, Array.prototype.slice.apply(arguments));

        if (this.options.autoRefresh) {
            var $btnGroup = this.$toolbar.find('>.btn-group');
            var $btnAutoRefresh = $btnGroup.find('.auto-refresh');

            if (!$btnAutoRefresh.length) {
                $btnAutoRefresh = $([
                    sprintf('<button class="btn btn-default auto-refresh %s" ', this.options.autoRefreshStatus ? 'enabled' : ''),
                    'type="button" ',
                    sprintf('title="%s">', this.options.formatAutoRefresh()),
                    sprintf('<i class="%s %s"></i>', this.options.iconsPrefix, this.options.icons.autoRefresh),
                    '</button>'
                ].join('')).appendTo($btnGroup);

                $btnAutoRefresh.on('click', $.proxy(this.toggleAutoRefresh, this));
            }
        }
    };

    BootstrapTable.prototype.toggleAutoRefresh = function() {
        if (this.options.autoRefresh) {
            if (this.options.autoRefreshStatus) {
                clearInterval(this.options.autoRefreshFunction);
                this.$toolbar.find('>.btn-group').find('.auto-refresh').removeClass('enabled');
            } else {
                var that = this;
                this.options.autoRefreshFunction = setInterval(function () {
                    that.refresh({silent: that.options.autoRefreshSilent});
                }, this.options.autoRefreshInterval*1000);
                this.$toolbar.find('>.btn-group').find('.auto-refresh').addClass('enabled');
            }
            this.options.autoRefreshStatus = !this.options.autoRefreshStatus;
        }
    };

})(jQuery);