public async Task <List <Screenshot> > GenerateScreenshots(
            IBrowserManager browserManager, SchemePublishedEvent @event)
        {
            using (browserManager)
            {
                var results = new List <Screenshot>();
                var config  = this.screenshotsConfig.Value;
                await browserManager.LaunchAsync(this.browserConfig.Value, this.extensionConfig.Value);

                var colorSchemeNameEncoded = WebUtility.UrlEncode(@event.ColorScheme.colorSchemeName);

                foreach (var(url, title) in from url in config.SCREENSHOT_URLS.Split(',', '~', StringSplitOptions.RemoveEmptyEntries)
                         .Select((url, i) => (url, i))
                         join title in config.SCREENSHOT_URL_TITLES.Split(',', '~', StringSplitOptions.RemoveEmptyEntries)
                         .Select((title, i) => (title, i))
                         on url.i equals title.i
                         select(url.url, title.title))
                {
                    var urlWithName = url.Replace($"{{{nameof(ColorScheme.colorSchemeName)}}}", colorSchemeNameEncoded);
                    foreach (var size in config.SCREENSHOT_SIZES.Split(',', '~', StringSplitOptions.RemoveEmptyEntries)
                             .Select(sizeStr => new ScreenshotSize(sizeStr)))
                    {
                        // var urlWithName = url.Replace($"{{{nameof(ColorScheme.colorSchemeName)}}}", colorSchemeNameEncoded + "+" + size.Width.ToString());
                        var baseOutFilePath = Path.Combine(config.SCREENSHOT_OUT_DIR, Guid.NewGuid().ToString());
                        var pngOutFilePath  = baseOutFilePath + ".png";
                        var jpegOutFilePath = baseOutFilePath + ".jpg";
                        await browserManager.ScreenshotAsync(urlWithName, size, pngOutFilePath);

                        this.progressiveImageConverter.ConvertPngToProgressiveJpeg(pngOutFilePath, jpegOutFilePath,
                                                                                   new ProgressiveImageConverterOptions
                        {
                            Resize = true,
                            Width  = size.Width,
                            Height = size.Height
                        });
                        results.Add(new Screenshot
                        {
                            AggregateId = @event.AggregateId,
                            Url         = urlWithName,
                            Title       = title,
                            Size        = size,
                            FilePath    = jpegOutFilePath
                        });
                    }
                }
                return(results);
            }
        }
        public async Task WarmUpAsync(IBrowserManager browserManager)
        {
            using (browserManager)
            {
                var results = new List <Screenshot>();
                var config  = this.screenshotsConfig.Value;
                await browserManager.LaunchAsync(this.browserConfig.Value, this.extensionConfig.Value);

                foreach (var url in config.SCREENSHOT_URLS.Split(',', '~', StringSplitOptions.RemoveEmptyEntries))
                {
                    foreach (var size in config.SCREENSHOT_SIZES.Split(',', '~', StringSplitOptions.RemoveEmptyEntries)
                             .Select(sizeStr => new ScreenshotSize(sizeStr)))
                    {
                        await browserManager.WarmUpAsync(url, size);
                    }
                }
            }
        }