const { Monitoring } = require("./hosts.js");
const { TokenRenew } = require("./tokens.js");
const { Log } = require("./logs.js");
const EventEmitter = require("node:events");
const shared = require("./shared.js");
const express = require("express");
const app = express();
const port = 3000;
const eventEmitter = new EventEmitter();
shared.eventEmitter = eventEmitter;
let baseToken = process.env.BASE_TOKEN;
shared.setToken(baseToken);

globalThis.minute = 1000 * 60;
globalThis.hour = minute * 60;
globalThis.day = hour * 24;

app.listen(port, () => {
  Log(`[${shared.now()}] Il server è online sulla porta ${port}`);
});

if ("BASE_TOKEN" in process.env) {
  Log(`[${shared.now()}] Token inserito: ${baseToken}`);
  if (/^nbp_[a-z0-9A-Z]{36}$/.test(baseToken)) {
    Monitoring();
    TokenRenew();
  } else {
    Log(`[${shared.now()}] Il token inserito non è valido.`);
    process.exit(2);
  }
} else {
  Log(`[${shared.now()}] Nessun token inserito.`);
  process.exit(1);
}

app.get("/", (_, res) => {
    res.json(shared.getHosts());  
});

/*
TODO:
- Fare in modo che la durata del timer di rinnovo sia dinamica e dipenda dalla durata rimasta del token inserito
- Fare in modo che con CTRL+C il programma effettivamente esca
- Aggiungere un timer modificato dall'esterno (opzionale, default 1 giorno) che decida per quanto tenere un log prima di cancellarlo
- Quando un log viene cancellato copiare il token corrente nel log
- All'uscita del programma far stampare l'ultimo token in uso
- Usare i log con docker logs
- Aggiornare Node e il metodo di build
*/
