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

using System.Globalization;
using System.Web.Routing;
using System.Web.WebPages.Resources;

namespace System.Web.WebPages.ApplicationParts
{
    internal class ResourceRouteHandler : IRouteHandler
    {
        private ApplicationPartRegistry _partRegistry;

        public ResourceRouteHandler(ApplicationPartRegistry partRegistry)
        {
            _partRegistry = partRegistry;
        }

        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            // Get the package name and static resource path from the route
            string partName = (string)requestContext.RouteData.GetRequiredString("module");

            // Try to find an application module by this name
            ApplicationPart module = _partRegistry[partName];

            // Throw an exception if we can't find the module by name
            if (module == null)
            {
                throw new InvalidOperationException(
                    String.Format(CultureInfo.CurrentCulture,
                                  WebPageResources.ApplicationPart_ModuleCannotBeFound, partName));
            }

            // Get the resource path
            string path = (string)requestContext.RouteData.GetRequiredString("path");

            // Return the resource handler for this module and path
            return new ResourceHandler(module, path);
        }
    }
}
