using System.Diagnostics.CodeAnalysis;
using CefSharp;
using TweetDuck.Browser.Data;

namespace TweetDuck.Browser.Handling{
    abstract class ResourceRequestHandler : CefSharp.Handler.ResourceRequestHandler{
        private class SelfFactoryImpl : IResourceRequestHandlerFactory{
            private readonly ResourceRequestHandler me;

            public SelfFactoryImpl(ResourceRequestHandler me){
                this.me = me;
            }

            bool IResourceRequestHandlerFactory.HasHandlers { get; } = true;

            [SuppressMessage("ReSharper", "RedundantAssignment")]
            IResourceRequestHandler IResourceRequestHandlerFactory.GetResourceRequestHandler(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling){
                disableDefaultHandling = me.ResourceHandlers.HasHandler(request);
                return me;
            }
        }

        public IResourceRequestHandlerFactory SelfFactory { get; }
        public ResourceHandlers ResourceHandlers { get; }

        protected ResourceRequestHandler(){
            this.SelfFactory = new SelfFactoryImpl(this);
            this.ResourceHandlers = new ResourceHandlers();
        }

        protected override IResourceHandler GetResourceHandler(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request){
            return ResourceHandlers.GetHandler(request);
        }
    }
}