const next = require('next');

import * as express from 'express';

import authentication from './middleware/authentication';

console.info(`Lauching portal on port ${process.env.PORT} in ${process.env.NODE_ENV}`); // eslint-disable-line

const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();

app.prepare().then(() => {
  const server = express();

  server.use(express.json());
  server.use(express.urlencoded({ extended: true }));

  server.use('/audkenning', authentication);

  server.get('/healthz', (_: express.Request, res: express.Response) => {
    res.status(200).json({ message: 'Up and running' });
  });

  server.get('*', (req: express.Request, res: express.Response) => {
    // Handle staff redirect to correct ssn if query contains ssn
    if (req.query.ssn && !req.path.includes('/staff')) {
      return res.redirect(
        req.path.includes('?')
          ? `/${req.query.ssn}${req.path}&isStaff=true`
          : `/${req.query.ssn}${req.path}?isStaff=true`,
      );
    }

    return handle(req, res);
  });

  server.listen(process.env.PORT, () => {
    console.info(`> Ready on http://localhost:${process.env.PORT}`); // eslint-disable-line
  });
});
