protected async Task <GenerateHtmlResponse> MakeGenerateRequest(GenerateHtmlRequest request)
        {
            var client = _factory.CreateClient();
            var result = await client.PostAsync($"{_settings.GenerateBaseUrl}/generate",
                                                new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json"));

            var stringResult = await result.Content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <GenerateHtmlResponse>(stringResult));
        }
        public async Task <string> GenerateHtml(string customerCode, int productId, string category, int?templateId,
                                                int?regionId, SiteMode siteMode, bool forceDownload)
        {
            PdfTemplate pdfTemplate;

            if (templateId.HasValue)
            {
                pdfTemplate = await _client.GetProduct <PdfTemplate>(customerCode, templateId.Value, siteMode);
            }
            else
            {
                pdfTemplate =
                    await _pdfTemplateSelector.GetPdfTemplateForProduct(customerCode, productId, category, siteMode);
            }

            if (pdfTemplate == null)
            {
                throw new TemplateNotFoundException();
            }

            var productBase = await _client.GetProduct <DpcProductBase>(customerCode, productId, false, siteMode,
                                                                        new[] { "Id", "UpdateDate" });

            if (productBase == null)
            {
                throw new GetProductJsonException();
            }
            var productDownloadUrl = _client.GetProductJsonDownloadUrl(customerCode, productId, true, siteMode);
            var request            = new GenerateHtmlRequest
            {
                TariffData = new GenerateHtmlFileInfo
                {
                    Id            = productId,
                    Timestamp     = ConvertToTimestamp(productBase.UpdateDate),
                    DownloadUrl   = productDownloadUrl,
                    ForceDownload = forceDownload,
                    SiteMode      = siteMode.ToString()
                },
                MapperData = new GenerateHtmlFileInfo
                {
                    Id          = pdfTemplate.PdfScriptMapper.Id,
                    Timestamp   = ConvertToTimestamp(pdfTemplate.PdfScriptMapper.Timestamp),
                    DownloadUrl =
                        $"{_settings.DpcStaticFilesScheme}:{pdfTemplate.PdfScriptMapper.PdfScriptMapperFile.AbsoluteUrl}",
                    ForceDownload = forceDownload,
                    SiteMode      = siteMode.ToString()
                },
                TemplateData = new GenerateHtmlFileInfo
                {
                    Id            = pdfTemplate.Id,
                    Timestamp     = ConvertToTimestamp(pdfTemplate.UpdateDate),
                    DownloadUrl   = $"{_settings.DpcStaticFilesScheme}:{pdfTemplate.PdfTemplateFile.AbsoluteUrl}",
                    ForceDownload = forceDownload,
                    SiteMode      = siteMode.ToString()
                },
                TemplateEngine = pdfTemplate.PdfTemplateEngine
            };
            var response = await MakeGenerateRequest(request);

            if (response.Success && !string.IsNullOrWhiteSpace(response.RelativePath))
            {
                var generatedHtml = await GetHtml(response.RelativePath);

                var replacedHtml =
                    await _regionTagsReplacer.ReplaceTags(customerCode, generatedHtml, productId, siteMode, regionId);

                return(replacedHtml);
            }

            throw new HtmlGenerationException(response.Error?.Message ?? "Unknown error while generating html");
        }