/*
|--------------------------------------------------------------------------
| Http Exception Handler
|--------------------------------------------------------------------------
|
| AdonisJs will forward all exceptions occurred during an HTTP request to
| the following class. You can learn more about exception handling by
| reading docs.
|
| The exception handler extends a base `HttpExceptionHandler` which is not
| mandatory, however it can do lot of heavy lifting to handle the errors
| properly.
|
*/

import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext';
import Logger from '@ioc:Adonis/Core/Logger';
import HttpExceptionHandler from '@ioc:Adonis/Core/HttpExceptionHandler';

export default class ExceptionHandler extends HttpExceptionHandler {
	protected statusPages = {
		'401,403': 'errors/unauthorized',
		'404': 'errors/not-found',
		'500..599': 'errors/server-error',
	};

	constructor() {
		super(Logger);
	}

	public async handle(error: any, ctx: HttpContextContract) {
		const { response, request, inertia } = ctx;

		/**
		 * Handle failed authentication attempt
		 */
		// if (['E_INVALID_AUTH_PASSWORD', 'E_INVALID_AUTH_UID'].includes(error.code)) {
		//   session.flash('errors', { login: error.message });
		//   return response.redirect('/login');
		// }
		// if ([401].includes(error.status)) {
		//   session.flash('errors', { login: error.message });
		//   return response.redirect('/dashboard');
		// }

    // https://github.com/inertiajs/inertia-laravel/issues/56
		if (request.header('X-Inertia') && [500, 503, 404, 403, 401].includes(response.getStatus())) {
			return inertia.render('Error', {
				status: response.getStatus(),
				message: error.message
			});
			// ->toResponse($request)
			// ->setStatusCode($response->status());
		}

		/**
		 * Forward rest of the exceptions to the parent class
		 */
		return super.handle(error, ctx);
	}
}
