const Discord = require("discord.js");

/* THIS CHECK IF THERE IS A REMIND MUST BE SENT */
module.exports = {
	/**
	 * Starts checking...
	 * @param {object} client The Discord Client instance
	 */
	init(client) {
		client.usersData
			.find({ reminds: { $gt: [] } })
			.then((users) => {
				for (const user of users) {
					if (!client.users.cache.has(user.id)) client.users.fetch(user.id);
					client.databaseCache.usersReminds.set(user.id, user);
				}
			});
		setInterval(async function () {
			const dateNow = Date.now();
			client.databaseCache.usersReminds.forEach(async (user) => {
				const dUser = client.users.cache.get(user.id);
				if (dUser) {
					const reminds = user.reminds;
					const mustSent = reminds.filter((r) => r.sendAt < dateNow);
					if (mustSent.length > 0) {
						mustSent.forEach((r) => {
							const embed = new Discord.MessageEmbed()
								.setAuthor({
									name: client.translate("general/remindme:TITLE")
								})
								.addField(client.translate("common:CREATION"), client.translate("general/remindme:CREATED", {
									time: client.convertTime(r.createdAt, "from")
								}))
								.addField(client.translate("common:MESSAGE"), r.message)
								.setColor(client.config.embed.color)
								.setFooter({
									text: client.config.embed.footer
								});
							dUser.send({
								embeds: [embed]
							});
						});
						user.reminds = user.reminds.filter((r) => r.sendAt >= dateNow);
						user.save();
						if (user.reminds.length === 0) client.databaseCache.usersReminds.delete(user.id);
					}
				}
			});
		}, 1000);
	}
};