exports.UserError = class UserError extends Error {
    constructor(message, ...translateArgs) {
        super(message);
        this.name = 'UserError';
        this.statusCode = 400;
        this.translateArgs = translateArgs;
    }
};

exports.getFinalState = function(ctx) {
    if (ctx.isNewInstance)
        return ctx.instance;
    if (ctx.currentInstance) {
        return Object.assign({},
            ctx.currentInstance.__data,
            ctx.data || ctx.instance
        );
    }

    return null;
};

exports.isMultiple = function(ctx) {
    return !ctx.isNewInstance && !ctx.currentInstance;
};

/* exports.fkToValue = async function(instance, ctx, model) {
    let transaction = ctx.options && ctx.options.transaction;
    let cleanInstance = JSON.parse(JSON.stringify(instance));
    let result = {};
    for (let key in cleanInstance) {
        let val = cleanInstance[key];
        if (val === undefined || val === null) continue;
        for (let key1 in model.relations) {
            let val1 = model.relations[key1];
            if (val1.keyFrom == key && key != 'id') {
                let recordSet = await val1.modelTo.findById(val, {}, {transaction});
                val = recordSet.name || recordSet.id; // FIXME preparar todos los modelos con campo name
                break;
            }
        }
        result[key] = val;
    }
    return result;
};
 */