/// <summary>
        /// The handle.
        /// </summary>
        /// <param name="context">
        /// The context.
        /// </param>
        /// <param name="cancellationToken">
        /// The cancellation token.
        /// </param>
        public void HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
        {
            var logger = (ILogger)context.Request.GetDependencyScope().GetService(typeof(ILogger));

            logger.Exception(context.Exception);

            InternalServerErrorException internalServerErrorException = (InternalServerErrorException)context.Request.GetDependencyScope();

            internalServerErrorException.GetException(BaseErrorCodes.UnhandledException, context.Exception);

            var messageToReturn = internalServerErrorException.Content;

            // var messageToReturn = "Something went wrong on the server";

            ////For the time being we are reading the app setting variable directly from appsettings since environment library is not stable.
            // TODO:must have to read the appsetting through Environment Library.
            var enableErrorDetails = !string.IsNullOrEmpty(ConfigurationManager.AppSettings["EnableErrorDetails"]) &&
                                     Convert.ToBoolean(ConfigurationManager.AppSettings["EnableErrorDetails"]);

            //if (EnvironmentInfo.IsDevelopmentMachine || enableErrorDetails)
            //{
            //    var sb = new StringBuilder();
            //    sb.AppendLine();
            //    sb.AppendLine();
            //    sb.AppendLine("------------------- Development Environment ----------------------");
            //    sb.AppendLine(context.Exception.GetType().FullName);
            //    sb.AppendLine(this.GetMessageToReturn(context.Exception, Environment.NewLine));
            //    sb.AppendLine(context.Exception.StackTrace);

            //    messageToReturn = sb.ToString();
            //}

            var statusCode = HttpStatusCode.InternalServerError;

            if (context.Exception is NotImplementedException)
            {
                statusCode = HttpStatusCode.NotImplemented;
            }

            /*
             * else if (context.Exception is AuthorizationException)
             * {
             *  statusCode = HttpStatusCode.Forbidden;
             * }
             * else if (context.Exception is InvalidInputException)
             * {
             *  var exception = (InvalidInputException)context.Exception;
             *
             *  ObjectContent<List<string>> content = new ObjectContent<List<string>>(exception.Errors, new JsonMediaTypeFormatter());
             *  var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
             *  {
             *      Content = content,
             *      ReasonPhrase = "Invalid Input",
             *      RequestMessage = context.ExceptionContext.Request
             *  };
             *  context.Result = new ErrorMessageResult(response);
             *  return;
             * }
             * else if (context.Exception is ExternalRequestException)
             * {
             *  var exception = (ExternalRequestException)context.Exception;
             *
             *  /*
             *  statusCode = exception.ExternalResult.StatusCode;
             *  var response = new HttpResponseMessage(statusCode)
             *  {
             *      Content = new StringContent(exception.Content),
             *      ReasonPhrase = "Bad Request",
             *      RequestMessage = context.ExceptionContext.Request
             *  };
             *
             *
             *  context.Result = new ErrorMessageResult(exception.ExternalResult);
             *  return;
             * }
             */

            // return the errors back to the caller
            // context.Response = useHttpError
            // ? context.Request.CreateErrorResponse(statusCode, messageToReturn)
            // : context.Request.CreateResponse(statusCode);
            var resp = new HttpResponseMessage(statusCode)
            {
                Content        = messageToReturn,
                ReasonPhrase   = context.Exception.GetType().FullName,
                RequestMessage = context.ExceptionContext.Request
            };

            context.Result = new ErrorMessageResult(resp);
        }