// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.

using System.Collections.Generic;
using System.Net.Http;

namespace System.Web.Http.WebHost
{
    internal static class HttpRequestMessageExtensions
    {
        private const string HttpContextBaseKey = "MS_HttpContext";
        private const string HttpBatchContextKey = "MS_HttpBatchContext";

        public static HttpContextBase GetHttpContext(this HttpRequestMessage request)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }

            HttpContextBase context;

            if (request.IsBatchRequest())
            {
                if (!request.Properties.TryGetValue(HttpBatchContextKey, out context))
                {
                    if (request.Properties.TryGetValue(HttpContextBaseKey, out context))
                    {
                        context = new HttpBatchContextWrapper(context, request);
                        request.Properties[HttpBatchContextKey] = context;
                    }
                    else
                    {
                        context = null;
                    }
                }
            }
            else if (!request.Properties.TryGetValue(HttpContextBaseKey, out context))
            {
                context = null;
            }

            return context;
        }

        public static void SetHttpContext(this HttpRequestMessage request, HttpContextBase context)
        {
            if (request == null)
            {
                throw new ArgumentNullException("request");
            }
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            request.Properties[HttpContextBaseKey] = context;
        }
    }
}