import { createServer } from "http";
import app from "./app.js";
import { attachWebSocketServer } from "./routes/events.js";
import { rootLogger } from "./lib/logger.js";

const rawPort = process.env["PORT"];

if (!rawPort) {
  throw new Error("PORT environment variable is required but was not provided.");
}

const port = Number(rawPort);

if (Number.isNaN(port) || port <= 0) {
  throw new Error(`Invalid PORT value: "${rawPort}"`);
}

const server = createServer(app);
attachWebSocketServer(server);

server.listen(port, () => {
  rootLogger.info("server started", { port });
  const domain = process.env["REPLIT_DEV_DOMAIN"];
  if (domain) {
    rootLogger.info("public url", { url: `https://${domain}/api/ui` });
    rootLogger.info("tower url", { url: `https://${domain}/tower` });
    rootLogger.info("ws url", { url: `wss://${domain}/api/ws` });
  }
});
