/**
 * PagedXBlockContainerPage is a variant of XBlockContainerPage that supports Pagination.
 */
define(["jquery", "underscore", "gettext", "js/views/pages/container", "js/views/paged_container"],
    function ($, _, gettext, XBlockContainerPage, PagedContainerView) {
        'use strict';
        var PagedXBlockContainerPage = XBlockContainerPage.extend({

            events: {"click .toggle-preview-button": "toggleChildrenPreviews"},
            defaultViewClass: PagedContainerView,
            components_on_init: false,

            initialize: function (options){
                this.events = _.extend({}, XBlockContainerPage.prototype.events, this.events);
                this.page_size = options.page_size || 10;
                this.showChildrenPreviews = options.showChildrenPreviews || true;
                XBlockContainerPage.prototype.initialize.call(this, options);
            },

            getViewParameters: function () {
               return  _.extend(XBlockContainerPage.prototype.getViewParameters.call(this), {
                   page_size: this.page_size,
                   page: this
               });
            },

            refreshXBlock: function(element, block_added, is_duplicate) {
                var xblockElement = this.findXBlockElement(element),
                    rootLocator = this.xblockView.model.id;
                if (xblockElement.length === 0 || xblockElement.data('locator') === rootLocator) {
                    this.render({refresh: true, block_added: block_added});
                } else {
                    this.refreshChildXBlock(xblockElement, block_added, is_duplicate);
                }
            },

            toggleChildrenPreviews: function(xblockElement) {
                xblockElement.preventDefault();
                this.xblockView.togglePreviews();
            },

            updatePreviewButton: function(show_previews){
                var text = (show_previews) ? gettext('Hide Previews') : gettext('Show Previews'),
                    button = $('.nav-actions .button-toggle-preview');

                this.$(".preview-text", button).text(text);
                this.$('.toggle-preview-button').removeClass("is-hidden");
            }
        });
        return PagedXBlockContainerPage;
    });
