define(['jquery', 'underscore', 'gettext', 'js/views/modals/base_modal'],
    function($, _, gettext, BaseModal) {
        var ValidationErrorModal = BaseModal.extend({
            events: {
                'click .action-cancel': 'cancel',
                'click .action-undo': 'resetAction'
            },

            initialize: function() {
                BaseModal.prototype.initialize.call(this);
                this.template = this.loadTemplate('validation-error-modal');
            },

            options: $.extend({}, BaseModal.prototype.options, {
                modalName: 'Validation Error Modal',
                title: gettext('Validation Error While Saving'),
                modalSize: 'md'
            }),

            addActionButtons: function() {
                this.addActionButton('undo', gettext('Undo Changes'), true);
                this.addActionButton('cancel', gettext('Change Manually'));
            },

            render: function() {
                BaseModal.prototype.render.call(this);
            },

            /* Set the JSON object of error_models that will be displayed
             * it must be an object, not json string. */
            setContent: function(json_object) {
                this.response = json_object;
            },

            /* Create the content HTML for this modal by passing necessary
             * parameters to template (validation-error-modal) */
            getContentHtml: function() {
                return this.template({
                    response: this.response,
                    num_errors: this.response.length
                });
            },

            /* Receive calback function from the view, so that it can be
             * invoked when the user clicks the reset button */
            setResetCallback: function(reset_callback) {
                this.reset_callback = reset_callback;
            },

            /* Upon receiving a user's clicking event on the reset button,
             * resets all setting changes, and hide the modal */
            resetAction: function() {
                // reset page content
                this.reset_callback();

                // hide the modal
                BaseModal.prototype.hide.call(this);
            }
        });

        return ValidationErrorModal;
    }
);
