from flask import render_template, request, jsonify, current_app
from flask_login import current_user
from . import main


@main.app_errorhandler(403)
def forbidden(e):
    current_app.logger.warning('Unauthorized access attempt (%s) at route %s (%s).',
        current_user.get_id() or 'guest', request.path, request.method)
    if request.accept_mimetypes.accept_json and not request.accept_mimetypes.accept_html:
        response = jsonify({'error': 'forbidden'})
        response.status_code = 403
        return response
    return render_template('403.html'), 403


@main.app_errorhandler(404)
def page_not_found(e):
    current_app.logger.info('Page not found: %s (%s)', request.path, request.method)
    if request.accept_mimetypes.accept_json and not request.accept_mimetypes.accept_html:
        response = jsonify({'error': 'not found'})
        response.status_code = 404
        return response
    return render_template('404.html'), 404


@main.app_errorhandler(500)
def internal_server_error(error):
    current_app.logger.error('Internal server error: %s', error)
    if request.accept_mimetypes.accept_json and not request.accept_mimetypes.accept_html:
        response = jsonify({'error': 'internal server error'})
        response.status_code = 500
        return response
    return render_template('500.html'), 500
