Meteor.methods({
	loadNextMessages(rid, end, limit = 20) {
		check(rid, String);
		check(limit, Number);

		if (!Meteor.userId()) {
			throw new Meteor.Error('error-invalid-user', 'Invalid user', {
				method: 'loadNextMessages'
			});
		}

		const fromId = Meteor.userId();

		if (!Meteor.call('canAccessRoom', rid, fromId)) {
			return false;
		}

		const options = {
			sort: {
				ts: 1
			},
			limit
		};

		if (!RocketChat.settings.get('Message_ShowEditedStatus')) {
			options.fields = {
				editedAt: 0
			};
		}

		let records;
		if (end) {
			records = RocketChat.models.Messages.findVisibleByRoomIdAfterTimestamp(rid, end, options).fetch();
		} else {
			records = RocketChat.models.Messages.findVisibleByRoomId(rid, options).fetch();
		}

		const messages = records.map((message) => {
			message.starred = _.findWhere(message.starred, {
				_id: fromId
			});
			return message;
		});

		return {
			messages
		};
	}
});
