using Newtonsoft.Json;

namespace EVCB_OCPP.DBAPI.Middleware;

public class ExceptionMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<ExceptionMiddleware> logger;

    public ExceptionMiddleware(RequestDelegate next, ILogger<ExceptionMiddleware> logger)
    {
        _next = next;
        this.logger = logger;
    }

    public async Task Invoke(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception ex)
        {
            var resultString = JsonConvert.SerializeObject(ex);
            logger.LogError(resultString);
            await context.Response.WriteAsync(resultString);
        }
    }
}