using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

namespace MEU.API.MiddleWare
{
    public class AddErrorLogToHeaderMiddelware
    {
        private readonly RequestDelegate next;

        public AddErrorLogToHeaderMiddelware(RequestDelegate _next)
        {
            next = _next;
        }

        public async Task Invoke(HttpContext context )
        {
            if (ErrorHandlingMiddleware.enableDebug)
            {
                var watch = new Stopwatch();
                watch.Start();
                context.Response.OnStarting(state => {
                    var httpContext = (HttpContext)state;
                    
                    httpContext.Response.Headers.Add("X-Response-Time-Milliseconds", new Microsoft.Extensions.Primitives.StringValues(watch.ElapsedMilliseconds.ToString() + " ms"));

                    var contextData = AppHttpContext.Current;
                    string Log = "No any log";
                    if (contextData != null && contextData.Items.ContainsKey("LOG_DATA"))
                    {
                        if (contextData.Items["LOG_DATA"]!=null)
                        {
                            Log = contextData.Items["LOG_DATA"].ToString();
                            Log = Log.Replace(Environment.NewLine, "");
                        }                     
                    }
                    httpContext.Response.Headers.Add("X-Log-Data", new Microsoft.Extensions.Primitives.StringValues(Log));
                    return Task.CompletedTask;
                }, context);
            }
            await next(context);

        }

        
    }
}