define(['backbone', 'gettext', 'backbone.associations'], function(Backbone, gettext) {
    var Chapter = Backbone.AssociatedModel.extend({
        defaults: function() {
            return {
                name: '',
                asset_path: '',
                order: this.collection ? this.collection.nextOrder() : 1
            };
        },
        isEmpty: function() {
            return !this.get('name') && !this.get('asset_path');
        },
        parse: function(response) {
            if ('title' in response && !('name' in response)) {
                response.name = response.title;
                delete response.title;
            }
            if ('url' in response && !('asset_path' in response)) {
                response.asset_path = response.url;
                delete response.url;
            }
            return response;
        },
        toJSON: function() {
            return {
                title: this.get('name'),
                url: this.get('asset_path')
            };
        },
        // NOTE: validation functions should return non-internationalized error
        // messages. The messages will be passed through gettext in the template.
        validate: function(attrs, options) {
            if (!attrs.name && !attrs.asset_path) {
                return {
                    message: gettext('Chapter name and asset_path are both required'),
                    attributes: {name: true, asset_path: true}
                };
            } else if (!attrs.name) {
                return {
                    message: gettext('Chapter name is required'),
                    attributes: {name: true}
                };
            } else if (!attrs.asset_path) {
                return {
                    message: gettext('asset_path is required'),
                    attributes: {asset_path: true}
                };
            }
        }
    });
    return Chapter;
});
