const next = require('next')
const Hapi = require('hapi')
const { pathWrapper, defaultHandlerWrapper, nextHandlerWrapper } = require('./next-wrapper')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const server = new Hapi.Server({
  port
})

app
  .prepare()
  .then(async () => {
    server.route({
      method: 'GET',
      path: '/a',
      handler: pathWrapper(app, '/a')
    })

    server.route({
      method: 'GET',
      path: '/b',
      handler: pathWrapper(app, '/b')
    })

    server.route({
      method: 'GET',
      path: '/_next/{p*}', /* next specific routes */
      handler: nextHandlerWrapper(app)
    })

    server.route({
      method: 'GET',
      path: '/{p*}', /* catch all route */
      handler: defaultHandlerWrapper(app)
    })

    try {
      await server.start()
      console.log(`> Ready on http://localhost:${port}`)
    } catch (error) {
      console.log('Error starting server')
      console.log(error)
    }
  })