using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
namespace Jellyfin.Api.Middleware;
/// 
/// Removes /emby and /mediabrowser from requested route.
/// 
public class LegacyEmbyRouteRewriteMiddleware
{
    private const string EmbyPath = "/emby";
    private const string MediabrowserPath = "/mediabrowser";
    private readonly RequestDelegate _next;
    private readonly ILogger _logger;
    /// 
    /// Initializes a new instance of the  class.
    /// 
    /// The next delegate in the pipeline.
    /// The logger.
    public LegacyEmbyRouteRewriteMiddleware(
        RequestDelegate next,
        ILogger logger)
    {
        _next = next;
        _logger = logger;
    }
    /// 
    /// Executes the middleware action.
    /// 
    /// The current HTTP context.
    /// The async task.
    public async Task Invoke(HttpContext httpContext)
    {
        var localPath = httpContext.Request.Path.ToString();
        if (localPath.StartsWith(EmbyPath, StringComparison.OrdinalIgnoreCase))
        {
            httpContext.Request.Path = localPath[EmbyPath.Length..];
            _logger.LogDebug("Removing {EmbyPath} from route.", EmbyPath);
        }
        else if (localPath.StartsWith(MediabrowserPath, StringComparison.OrdinalIgnoreCase))
        {
            httpContext.Request.Path = localPath[MediabrowserPath.Length..];
            _logger.LogDebug("Removing {MediabrowserPath} from route.", MediabrowserPath);
        }
        await _next(httpContext).ConfigureAwait(false);
    }
}