import cron from 'node-cron';
import { Op } from 'sequelize';
import db from '../models';

const UserModel = db.User;

/**
 * Cron job to manage leave status:
 * 1) Activate leave when current time enters leave window
 * 2) Clear leave when leave_end_date has passed
 *
 * Runs every minute.
 */
export const startLeaveCron = () => {
  cron.schedule('* * * * *', async () => {
    try {
      const now = new Date();

      //Activate leave (for users whose leave has started)
      const [activatedCount] = await UserModel.update(
        { on_leave: true },
        {
          where: {
            on_leave: false,
            leave_start_date: { [Op.lte]: now },
            leave_end_date: { [Op.gte]: now },
          },
        }
      );

      if (activatedCount > 0) {
        console.log(
          `[LeaveCron] Activated leave for ${activatedCount} user(s) at ${now.toISOString()}`
        );
      }

      //Deactivate leave (for users whose leave has ended)
      const [clearedCount] = await UserModel.update(
        {
          on_leave: false,
          leave_start_date: null,
          leave_end_date: null,
          leave_type: null,
        },
        {
          where: {
            on_leave: true,
            leave_end_date: { [Op.lt]: now },
          },
        }
      );

      if (clearedCount > 0) {
        console.log(
          `[LeaveCron] Cleared leave for ${clearedCount} user(s) at ${now.toISOString()}`
        );
      }
    } catch (error) {
      console.error('[LeaveCron] Error while managing leave status:', error);
    }
  });

  console.log('[LeaveCron] Scheduler started (runs every minute)');
};
