using System.Net;
using Microsoft.AspNetCore.Http;
namespace MediaBrowser.Common.Extensions
{
    /// 
    /// Static class containing extension methods for .
    /// 
    public static class HttpContextExtensions
    {
        /// 
        /// Checks the origin of the HTTP context.
        /// 
        /// The incoming HTTP context.
        /// true if the request is coming from the same machine as is running the server, false otherwise.
        public static bool IsLocal(this HttpContext context)
        {
            return (context.Connection.LocalIpAddress is null
                    && context.Connection.RemoteIpAddress is null)
                   || Equals(context.Connection.LocalIpAddress, context.Connection.RemoteIpAddress);
        }
        /// 
        /// Extracts the remote IP address of the caller of the HTTP context.
        /// 
        /// The HTTP context.
        /// The remote caller IP address.
        public static IPAddress GetNormalizedRemoteIP(this HttpContext context)
        {
            // Default to the loopback address if no RemoteIpAddress is specified (i.e. during integration tests)
            var ip = context.Connection.RemoteIpAddress ?? IPAddress.Loopback;
            if (ip.IsIPv4MappedToIPv6)
            {
                ip = ip.MapToIPv4();
            }
            return ip;
        }
    }
}