define(["js/views/baseview", "underscore", "gettext", "js/views/feedback_notification", "js/views/feedback_prompt"],
        function(BaseView, _, gettext, NotificationView, PromptView) {
    var ShowTextbook = BaseView.extend({
        initialize: function() {
            this.template = _.template($("#show-textbook-tpl").text());
            this.listenTo(this.model, "change", this.render);
        },
        tagName: "section",
        className: "textbook",
        events: {
            "click .edit": "editTextbook",
            "click .delete": "confirmDelete",
            "click .show-chapters": "showChapters",
            "click .hide-chapters": "hideChapters"
        },
        render: function() {
            var attrs = $.extend({}, this.model.attributes);
            attrs.bookindex = this.model.collection.indexOf(this.model);
            attrs.course = window.course.attributes;
            this.$el.html(this.template(attrs));
            return this;
        },
        editTextbook: function(e) {
            if(e && e.preventDefault) { e.preventDefault(); }
            this.model.set("editing", true);
        },
        confirmDelete: function(e) {
            if(e && e.preventDefault) { e.preventDefault(); }
            var textbook = this.model, collection = this.model.collection;
            var msg = new PromptView.Warning({
                title: _.template(gettext("Delete “<%= name %>”?"),
                    {name: textbook.escape('name')}),
                message: gettext("Deleting a textbook cannot be undone and once deleted any reference to it in your courseware's navigation will also be removed."),
                actions: {
                    primary: {
                        text: gettext("Delete"),
                        click: function(view) {
                            view.hide();
                            var delmsg = new NotificationView.Mini({
                                title: gettext("Deleting")
                            }).show();
                            textbook.destroy({
                                complete: function() {
                                    delmsg.hide();
                                }
                            });
                        }
                    },
                    secondary: {
                        text: gettext("Cancel"),
                        click: function(view) {
                            view.hide();
                        }
                    }
                }
            }).show();
        },
        showChapters: function(e) {
            if(e && e.preventDefault) { e.preventDefault(); }
            this.model.set('showChapters', true);
        },
        hideChapters: function(e) {
            if(e && e.preventDefault) { e.preventDefault(); }
            this.model.set('showChapters', false);
        }
    });
    return ShowTextbook;
});