const NotificationProvider = require("./notification-provider");
const axios = require("axios");
const { DOWN } = require("../../src/util");

class Squadcast extends NotificationProvider {

    name = "squadcast";

    async send(notification, msg, monitorJSON = null, heartbeatJSON = null) {
        let okMsg = "Sent Successfully.";

        try {

            let config = {};
            let data = {
                message: msg,
                description: "",
                tags: {},
                heartbeat: heartbeatJSON,
                source: "uptime-kuma"
            };

            if (heartbeatJSON !== null) {
                data.description = heartbeatJSON["msg"];
                data.event_id = heartbeatJSON["monitorID"];

                if (heartbeatJSON["status"] === DOWN) {
                    data.message = `${monitorJSON["name"]} is DOWN`;
                    data.status = "trigger";
                } else {
                    data.message = `${monitorJSON["name"]} is UP`;
                    data.status = "resolve";
                }

                let address;
                switch (monitorJSON["type"]) {
                    case "ping":
                        address = monitorJSON["hostname"];
                        break;
                    case "port":
                    case "dns":
                    case "steam":
                        address = monitorJSON["hostname"];
                        if (monitorJSON["port"]) {
                            address += ":" + monitorJSON["port"];
                        }
                        break;
                    default:
                        address = monitorJSON["url"];
                        break;
                }

                data.tags["AlertAddress"] = address;

                monitorJSON["tags"].forEach(tag => {
                    data.tags[tag["name"]] = {
                        value: tag["value"]
                    };
                    if (tag["color"] !== null) {
                        data.tags[tag["name"]]["color"] = tag["color"];
                    }
                });
            }

            await axios.post(notification.squadcastWebhookURL, data, config);
            return okMsg;

        } catch (error) {
            this.throwGeneralAxiosError(error);
        }

    }

}

module.exports = Squadcast;