// src/harness.ts
// Copyright (C) 2025 DTP Technologies, LLC
// All Rights Reserved

// import env from "./config/env.js";
import log from "./lib/log.js";

import express, { NextFunction, Request, Response } from "express";
import Tripwire from "./service.js";

async function defaultErrorHandler(
  err: Error,
  req: Request,
  res: Response,
  next: NextFunction
) {
  await Tripwire.processError(err, req, res);

  log.error("ExpressJS error", { error: err });
  res.locals.errorCode = err.statusCode || 500;
  res.locals.error = err;
  res.status(res.locals.errorCode).json({
    success: false,
    message: err.message,
  });

  return next();
}

(async () => {
  try {
    await Tripwire.start();

    const app = express();
    app.use(Tripwire.middleware());

    app.get("/", (_req: Request, res: Response) => {
      res.send("Hello World!");
    });

    app.use((_req: Request, _res: Response, next: NextFunction) => {
      const error = new Error("Not Found");
      error.statusCode = 404;
      next(error);
    });

    app.use(defaultErrorHandler);

    app.listen(3000, "127.0.0.1", 32, (error?: Error) => {
      if (error) {
        log.error("Tripwire harness has failed to start", { error });
        process.exit(1);
      }
      log.info("Tripwire harness is listening on port 3000");
    });
  } catch (error) {
    log.error("Tripwire harness has failed", { error });
    process.exit(1);
  }
})();
