using System.Configuration;
using System.Web;
using IdentityServer3.AccessTokenValidation;
using Kreta.BusinessLogic;
using Kreta.Naplo.WebApi;
using Kreta.Web.Logging.Logger;
using Microsoft.Owin;
using Owin;
using SimpleInjector;
using SimpleInjector.Integration.WebApi;
using SimpleInjector.Lifestyles;
using HttpGlobalConfiguration = System.Web.Http.GlobalConfiguration;

[assembly: OwinStartup(typeof(Startup))]
namespace Kreta.Naplo.WebApi
{
    public static class Startup
    {
        public static void Configuration(IAppBuilder appBuilder)
        {
            HttpGlobalConfiguration.Configure(WebApiConfig.Register);

            log4net.Config.XmlConfigurator.Configure();

            var container = new Container();
            container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
            container.InjectNaploMobileBusinessLogic();
            container.Register(() => TraceLoggerFactory.Create(HttpContext.Current), Lifestyle.Scoped);
            container.RegisterWebApiControllers(HttpGlobalConfiguration.Configuration);
            container.Verify();
            HttpGlobalConfiguration.Configuration.DependencyResolver = new SimpleInjectorWebApiDependencyResolver(container);

            appBuilder.UseIdentityServerBearerTokenAuthentication(
                   new IdentityServerBearerTokenAuthenticationOptions
                   {
                       ValidationMode = ValidationMode.Local,
                       Authority = ConfigurationManager.AppSettings["idp:Authority"],
                       RequiredScopes = ConfigurationManager.AppSettings["idp:RequiredScopes"].Split(';')
                   })
                .UseWebApi(HttpGlobalConfiguration.Configuration);
        }
    }
}