var icms = icms || {};

icms.adminModerators = (function ($) {

    this.url_submit = '';
    this.url_delete = '';
    this.url_autocomplete = '';
    this.ctype_moderators_list = {};
    this.csrf_token = '';

    let self = this;

    this.onDocumentReady = function(){
        this.ctype_moderators_list = $('#ctype_moderators_list');
        let ctype_moderators_add = $('#ctype_moderators_add');
        let cache = {};
        $("#user_email", ctype_moderators_add).autocomplete({
            minLength: 2,
            delay: 500,
            source: function(request, response) {
                let term = request.term;
                if (term in cache) {
                    response( cache[ term ] );
                    return;
                }
                $.getJSON(self.url_autocomplete, request, function( data, status, xhr ) {
                    cache[ term ] = data;
                    response( data );
                });
            }
        });
        this.url_submit = ctype_moderators_add.data('url_submit');
        this.url_delete = ctype_moderators_add.data('url_delete');;
        this.url_autocomplete = ctype_moderators_add.data('url_autocomplete');
        this.csrf_token = icms.forms.getCsrfToken();
        $('#submit', ctype_moderators_add).on('click', function(){
            return self.add(this);
        });
        this.ctype_moderators_list.on('click', '.actions .moderator-cancel', function(){
            return self.cancel(this);
        });
    };

    this.add = function(btn){

        let name = $('#user_email').val();

        if (name.length === 0) { return false; }

        $(btn).addClass('is-busy');

        $.post(this.url_submit, {name: name, csrf_token: this.csrf_token}, function(result){

            $('#user_email').val('');

            $(btn).removeClass('is-busy');

            if (result.error){
                icms.modal.alert(result.message, 'error');
                return false;
            }
            self.ctype_moderators_list.show();
            $('#datagrid tbody', self.ctype_moderators_list).append(result.html);

            icms.modal.bind('a.ajax-modal');

            icms.events.run('admin_moderators_add', result);

        }, 'json');

        return false;
    };

    this.cancel = function(btn){

        let id = $(btn).data('user_id');

        let list_item = $('#moderator-'+id, self.ctype_moderators_list);

        $('a.delete, a.view', list_item).hide();
        $('.loading-icon', list_item).show();

        $.post(this.url_delete, {id: id, csrf_token: this.csrf_token}, function(result){

            if (result.error){
                $('.ajaxlink', list_item).show();
                $('.loading-icon', list_item).hide();
                icms.modal.alert(result.message, 'error');
                return false;
            }

            list_item.fadeOut('fast', function(){
                $(this).remove();
                if (!$('#datagrid tbody tr', self.ctype_moderators_list).length){
                    self.ctype_moderators_list.hide();
                }
                icms.events.run('admin_moderators_cancel', result);
            });

        }, 'json');

        return false;
    };

    return this;

}).call(icms.adminModerators || {},jQuery);