const schedule = require('node-schedule');
const {triggerEvent} = require("../controller/integrations");

let currentState = "ping";
let job;

// Sets the current state (running = no pings, ping = send pings)
module.exports.setState = (state = "ping") => {
    currentState = state;
}

// Send a ping to the event system
module.exports.sendPing = async (type, message) => {
    await triggerEvent("minutePassed", {type, message});
}

// Sends a ping only if the ping state is active
module.exports.sendCurrent = async () => {
    if (currentState === "ping") await this.sendPing();
}

// Sends an 'error' ping to the event system
module.exports.sendError = async (error = "Unknown error") => {
    await triggerEvent("testFailed", error);
}

// Sends a 'running' ping to the event system
module.exports.sendRunning = async () => {
    await triggerEvent("testStarted");
}

// Sends a 'finished' ping to the event system
module.exports.sendFinished = async (data) => {
    await triggerEvent("testFinished", data);
}

// Starts a timer which sends a ping every minute
module.exports.startTimer = () => {
    job = schedule.scheduleJob('* * * * *', () => this.sendCurrent());
}

// Stops the timer
module.exports.stopTimer = () => {
    if (job !== undefined) {
        job.cancel();
        job = undefined;
    }
}