// Load environment variables THIS MUST BE AT THE TOP
const path = require("path");
const getHostNameOrIP = require("./getHostNameOrIP");
const logger = require("./logger");

require("dotenv").config({
  path: path.resolve(process.cwd(), `.env.${process.env.NODE_ENV || "development"}`)
});
const CrispStatusReporter = require("crisp-status-reporter").CrispStatusReporter;
const InstanceManager = require("../utils/instanceMgr").default;

function StartStatusReporter() {
  //For ImEX Online.

  return InstanceManager({
    executeFunction: true,
    args: [],
    imex: () => {
      if (
        process.env.NODE_ENV === undefined ||
        !process.env.CRISP_SECRET_TOKEN ||
        !process.env.CRISP_SERVICE_IDENTIFIER ||
        !process.env.CRISP_NODE_IDENTIFIER
      ) {
        logger.log("crisp-status-update-error", "DEBUG", null, null, { message: "Environment Variables not set." });
        return;
      }

      try {
        const crispStatusReporter = new CrispStatusReporter({
          token: process.env.CRISP_SECRET_TOKEN, // Your reporter token (given by Crisp)
          service_id: process.env.CRISP_SERVICE_IDENTIFIER, // Service ID containing the parent Node for Replica (given by Crisp)
          node_id: process.env.CRISP_NODE_IDENTIFIER, // Node ID containing Replica (given by Crisp)
          replica_id: getHostNameOrIP(), // Unique Replica ID for instance (ie. your IP on the LAN)
          interval: 30 // Reporting interval (in seconds; defaults to 30 seconds if not set)

          // console: {
          //   debug: (log_message, data) => logger.log("crisp-status-update", "DEBUG", null, null, { log_message, data }),
          //   log: (log_message, data) => logger.log("crisp-status-update", "DEBUG", null, null, { log_message, data }),
          //   warn: (log_message, data) => logger.log("crisp-status-update", "WARN", null, null, { log_message, data }),
          //   error: (log_message, data) => logger.log("crisp-status-update", "ERROR", null, null, { log_message, data })
          // } // Console instance if you need to debug issues,
        });

        return crispStatusReporter;
      } catch (error) {
        logger.log("crisp-status-update-error", "DEBUG", null, null, { error: error.message });
      }
    }
  });
}

module.exports = StartStatusReporter;
