const cronJob = require('./cronJob');
const { logger } = require('nodejs-log-agent');

// Ambil interval dari environment variable, default 5 menit (dalam milidetik)
const CHECK_INTERVAL_MS = parseInt(process.env.INTERNAL_HEALTH_CHECK_INTERVAL_MS, 10) || 5 * 60 * 1000;

let intervalId = null;

/**
 * Memeriksa kesehatan cron job dan mencoba memulai ulang jika perlu.
 */
function checkAndHealCron() {
    try {
        const isRunning = cronJob.getStatus();
        const desiredState = cronJob.getDesiredState();

        if (!isRunning && desiredState) {
            // Kondisi: Seharusnya berjalan, tetapi kenyataannya berhenti.
            logger.warn('[Internal Health Monitor] Cron job terdeteksi berhenti secara tak terduga. Mencoba memulai ulang...');
            cronJob.start(); // Memanggil fungsi start untuk memulihkan
            logger.info('[Internal Health Monitor] Cron job berhasil dimulai ulang.');
        } else {
            // logger.debug('[Internal Health Monitor] Status cron job sesuai dengan yang diharapkan.');
        }
    } catch (error) {
        logger.error('[Internal Health Monitor] Terjadi error saat memeriksa kesehatan cron job.', {
            message: error.message,
            stack: error.stack,
        });
    }
}

function start() {
    if (intervalId) return; // Mencegah interval ganda
    logger.info(`[Internal Health Monitor] Monitor internal diaktifkan. Pengecekan akan dilakukan setiap ${CHECK_INTERVAL_MS / 1000} detik.`);
    intervalId = setInterval(checkAndHealCron, CHECK_INTERVAL_MS);
    checkAndHealCron(); // Lakukan pengecekan pertama kali saat start
}

module.exports = { start };