const fastify = require('fastify')({ logger: { level: 'error' } })
const Next = require('next')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'

fastify.register((fastify, opts, next) => {
  const app = Next({ dev })
  app.prepare()
    .then(() => {
      if (dev) {
        fastify.get('/_next/*', (req, reply) => {
          return app.handleRequest(req.req, reply.res)
            .then(() => {
              reply.sent = true
            })
        })
      }

      fastify.get('/a', (req, reply) => {
        return app.render(req.req, reply.res, '/b', req.query)
          .then(() => {
            reply.sent = true
          })
      })

      fastify.get('/b', (req, reply) => {
        return app.render(req.req, reply.res, '/a', req.query)
          .then(() => {
            reply.sent = true
          })
      })

      fastify.get('/*', (req, reply) => {
        return app.handleRequest(req.req, reply.res)
          .then(() => {
            reply.sent = true
          })
      })

      fastify.setNotFoundHandler((request, reply) => {
        return app.render404(request.req, reply.res)
          .then(() => {
            reply.sent = true
          })
      })

      next()
    })
    .catch((err) => next(err))
})

fastify.listen(port, (err) => {
  if (err) throw err
  console.log(`> Ready on http://localhost:${port}`)
})
