const ghostBookshelf = require('./base');
const _ = require('lodash');

const PostRevision = ghostBookshelf.Model.extend({
    tableName: 'post_revisions',

    author() {
        return this.belongsTo('User', 'author_id');
    },

    permittedOptions(methodName) {
        let options = ghostBookshelf.Model.permittedOptions.call(this, methodName);
        const validOptions = {
            findAll: ['filter', 'columns']
        };

        if (validOptions[methodName]) {
            options = options.concat(validOptions[methodName]);
        }

        return options;
    },

    defaultRelations: function defaultRelations(methodName, options) {
        if (['edit', 'add', 'destroy'].indexOf(methodName) !== -1) {
            options.withRelated = _.union(['author'], options.withRelated || []);
        }

        return options;
    },

    orderDefaultRaw() {
        return 'created_at_ts DESC';
    },

    toJSON(unfilteredOptions) {
        const options = PostRevision.filterOptions(unfilteredOptions, 'toJSON');
        const attrs = ghostBookshelf.Model.prototype.toJSON.call(this, options);

        // We embed the full author object, so no need to send the author_id
        delete attrs.author_id;
        return attrs;
    }
});

module.exports = {
    PostRevision: ghostBookshelf.model('PostRevision', PostRevision)
};
