import {
  ErrorRequestHandler,
  Express,
  NextFunction,
  Request,
  Response,
} from "express";
import express from "express";

export function logger(req: Request, res: Response, next: NextFunction) {
  const datetime = new Date();
  const hours = datetime.getHours();
  const minutes = datetime.getMinutes();
  const seconds = datetime.getSeconds();
  let msg = console.log(
    "[" +
      (Number(hours) > 9 ? hours : "0" + hours) +
      ":" +
      (Number(minutes) > 9 ? minutes : "0" + minutes) +
      ":" +
      (Number(seconds) > 9 ? seconds : "0" + seconds) +
      "]" +
      " #" +
      req.originalUrl +
      " @" +
      req.ip,
  );
  next();
}

export function server() {
  const app = express();
  app.use(logger);
  return app;
}

export function start(app: Express, port: number = 8080) {
  app.use(error);
  let p = port;
  app.listen(p, () => {
    console.log("You can find this server on: http://localhost:" + p);
  });
}

export function error(
  err: ErrorRequestHandler,
  req: Request,
  res: Response,
  next: NextFunction,
) {
  const page = `<html>
<head>
<title>404</title>
</head>
<body>
<h1> 404 - Not found </h1>
</body>
</html>`;
  res.status(404).send(page);
  console.error(err.toString());
}
