const axios = require("axios");

const postWebhook = async (url, event, data, triggerActivity) => {
    axios.post(url, {event, data}, {headers: {"user-agent": "MySpeed/WebhookAgent"}})
        .then(() => triggerActivity())
        .catch(() => triggerActivity(true));
}

module.exports = (registerEvent) => {
    registerEvent('testStarted', async (integration, data, activity) => {
        if (integration.data.send_started) await postWebhook(integration.data.url, "TEST_STARTED", undefined, activity);
    });

    registerEvent('minutePassed', async (integration, data, activity) => {
        if (integration.data.send_alive) await postWebhook(integration.data.url, "KEEP_ALIVE", undefined, activity);
    });

    registerEvent('testFinished', async (integration, data, activity) => {
        if (integration.data.send_finished) await postWebhook(integration.data.url, "TEST_FINISHED", data, activity);
    });

    registerEvent('testFailed', async (integration, error, activity) => {
        if (integration.data.send_failed) await postWebhook(integration.data.url, "TEST_FAILED", {error}, activity);
    });

    registerEvent('recommendationsUpdated', async (integration, data, activity) => {
        if (integration.data.send_recommendations) await postWebhook(integration.data.url, "RECOMMENDATIONS_UPDATED", data, activity);
    });

    registerEvent('configUpdated', async (integration, data, activity) => {
        if (integration.data.send_config_updates) await postWebhook(integration.data.url, "CONFIG_UPDATED", data, activity);
    });

    return {
        icon: "fa-solid fa-globe",
        fields: [
            {name: "url", type: "text", required: true, regex: /https?:\/\/.+/},
            {name: "send_started", type: "boolean", required: false},
            {name: "send_finished", type: "boolean", required: false},
            {name: "send_alive", type: "boolean", required: false},
            {name: "send_failed", type: "boolean", required: false},
            {name: "send_recommendations", type: "boolean", required: false},
            {name: "send_config_updates", type: "boolean", required: false}
        ]
    };
}