import { logger } from "@zerobyte/core/node";
import { shutdown } from "./server/modules/lifecycle/shutdown";
import { runCLI } from "./server/cli";
import { createStartHandler, defaultStreamHandler, defineHandlerCallback } from "@tanstack/react-start/server";
import { createServerEntry } from "@tanstack/react-start/server-entry";

const cliRun = await runCLI(Bun.argv);
if (cliRun) {
	process.exit(0);
}

const customHandler = defineHandlerCallback((ctx) => {
	return defaultStreamHandler(ctx);
});

const fetch = createStartHandler(customHandler);

export default createServerEntry({
	fetch,
});

process.on("SIGTERM", async () => {
	logger.info("SIGTERM received, starting graceful shutdown...");
	try {
		await shutdown();
	} catch (err) {
		logger.error("Error during shutdown", err);
	} finally {
		process.exit(0);
	}
});

process.on("SIGINT", async () => {
	logger.info("SIGINT received, starting graceful shutdown...");
	try {
		await shutdown();
	} catch (err) {
		logger.error("Error during shutdown", err);
	} finally {
		process.exit(0);
	}
});
