const { mClient } = require('../index');
function getRemaining(timer) {
	if (timer.state !== 'running') {
		return timer.timeRemaining;
	}

	return Math.max(
		0,
		timer.timeRemaining - (Date.now() - timer.startedAt)
	);
}

module.exports = {
    name: 'timerCheck',

    async execute(client) {
        const db = mClient.db('neo-db');
        const wgeColl = db.collection('timer_wge');

        const timers = await wgeColl.find({
            state: { $ne: 'stopped' }
        }).toArray();

        const now = Date.now();

        for (const timer of timers) {

            const remaining = getRemaining(timer);

            // -------------------------
            // HALF TIME (3.5 days left)
            // -------------------------
            if (
                !timer.notifications?.half &&
                remaining <= 3.5 * 24 * 60 * 60 * 1000
            ) {
                await wgeColl.updateOne(
                    { _id: timer._id },
                    { $set: { "notifications.half": true } }
                );

                client.emit('timerHalf', timer);
            }

            // -------------------------
            // 24H WARNING
            // -------------------------
            if (
                !timer.notifications?.day24 &&
                remaining <= 24 * 60 * 60 * 1000
            ) {
                await wgeColl.updateOne(
                    { _id: timer._id },
                    { $set: { "notifications.day24": true } }
                );

                client.emit('timer24h', timer);
            }

            // -------------------------
            // COMPLETION
            // -------------------------
            if (
                !timer.notifications?.complete &&
                remaining <= 0
            ) {
                await wgeColl.updateOne(
                    { _id: timer._id },
                    { $set: { "notifications.complete": true } }
                );

                client.emit('timerComplete', timer);
            }
        }
    }
};