module.exports = Self => {
    Self.remoteMethodCtx('sendCheckingPresence', {
        description: 'Creates a message in the chat model checking the user status',
        accessType: 'WRITE',
        accepts: [{
            arg: 'workerId',
            type: 'number',
            required: true,
            description: 'The recipient user id'
        },
        {
            arg: 'message',
            type: 'string',
            required: true,
            description: 'The message'
        }],
        returns: {
            type: 'object',
            root: true
        },
        http: {
            path: `/sendCheckingPresence`,
            verb: 'POST'
        }
    });

    Self.sendCheckingPresence = async(ctx, recipientId, message, options) => {
        if (!recipientId) return false;

        const myOptions = {};

        if (typeof options == 'object')
            Object.assign(myOptions, options);

        const models = Self.app.models;
        const userId = ctx.req.accessToken.userId;
        const sender = await models.Account.findById(userId);
        const recipient = await models.Account.findById(recipientId, null, myOptions);

        // Prevent sending messages to yourself
        if (recipientId == userId) return false;

        if (!recipient)
            throw new Error(`Could not send message "${message}" to worker id ${recipientId} from user ${userId}`);

        if (process.env.NODE_ENV == 'test')
            message = `[Test:Environment to user ${userId}] ` + message;

        await models.Chat.create({
            senderFk: sender.id,
            recipient: `@${recipient.name}`,
            dated: Date.vnNew(),
            checkUserStatus: 1,
            message: message,
            status: 0,
            attempts: 0
        });

        return true;
    };
};