module.exports = Self => {
    Self.remoteMethodCtx('executeFunc', {
        description: 'Return result of function',
        accessType: 'EXECUTE',
        accepts: [
            {
                arg: 'routine',
                type: 'string',
                description: 'The routine name',
                required: true,
                http: {source: 'path'}
            },
            {
                arg: 'schema',
                type: 'string',
                description: 'The routine schema',
                required: true,
            },
            {
                arg: 'params',
                type: ['any'],
                description: 'The params array',
            },
        ],
        returns: {
            type: 'any',
            root: true
        },
        http: {
            path: `/:routine/execute-func`,
            verb: 'POST'
        }
    });

    Self.executeFunc = async(ctx, routine, schema, params, options) => {
        const query = `SELECT ${schema}.${routine}`;

        const response = await Self.execute(ctx, 'FUNCTION', query, params, options);
        return Object.values(response)[0];
    };
};