define(["backbone", "gettext", "underscore"], function (Backbone, gettext, _) {
    /**
     * Model for xblock validation messages as displayed in Studio.
     */
    var XBlockValidationModel = Backbone.Model.extend({
        defaults: {
            summary: {},
            messages: [],
            empty: true,
            xblock_id: null
        },

        WARNING : "warning",
        ERROR: "error",
        NOT_CONFIGURED: "not-configured",

        parse: function(response) {
            if (!response.empty) {
                var summary = "summary" in response ? response.summary : {};
                var messages = "messages" in response ? response.messages : [];
                if (!summary.text) {
                    summary.text = gettext("This component has validation issues.");
                }
                if (!summary.type) {
                    summary.type = this.WARNING;
                    // Possible types are ERROR, WARNING, and NOT_CONFIGURED. NOT_CONFIGURED is treated as a warning.
                    _.find(messages, function (message) {
                        if (message.type === this.ERROR) {
                            summary.type = this.ERROR;
                            return true;
                        }
                        return false;
                    }, this);
                }
                response.summary = summary;
                if (response.showSummaryOnly) {
                    messages = [];
                }
                response.messages = messages;
            }

            return response;
        }
    });
    return XBlockValidationModel;
});
