/// <summary>
    /// Returns name of the product with highlighted text if any.
    /// </summary>
    private string GetHighlightedNameResultView(SearchResult result)
    {
        const string name = "skuname";

        return(result.Highlights?.FirstOrDefault(x => x.Key.Equals(name, StringComparison.OrdinalIgnoreCase)).Value?.First()
               ?? result.Document[name].ToString());
    }
    /// <summary>
    /// Returns tags with related image and out of stock message if any.
    /// </summary>
    private string GetImageForSearchResultView(SearchResult result, SKUInfo skuInfo)
    {
        var  tagResult = new StringBuilder();
        bool isInStock = SKUInfoProvider.IsSKUInStock(skuInfo);

        tagResult.AppendFormat(
            "<figure class='product-tile-image {0}'><img src='{2}' alt='{3}'/>{1}</figure>",
            isInStock ? string.Empty : "notavailable",
            isInStock ? string.Empty : "<span class=\'product-tile-stock notavailable\'> OUT OF STOCK </span>",
            result.Document["skuimagepath"],
            result.Document["skuname"]
            );

        return(tagResult.ToString());
    }
    /// <summary>
    /// Returns tags with current status of the product if any.
    /// </summary>
    private string GetStatusResultView(SearchResult result)
    {
        var status = result.Document["skupublicstatusid"]?.ToString();

        int skuStatus;

        int.TryParse(status, out skuStatus);

        PublicStatusInfo publicStatus = PublicStatusInfoProvider.GetPublicStatusInfo(skuStatus);

        if (status == null || publicStatus == null)
        {
            return(String.Empty);
        }

        var name            = HTMLHelper.HTMLEncode(ResHelper.LocalizeString(publicStatus.PublicStatusDisplayName));
        var statusClassName = HTMLHelper.HTMLEncode(publicStatus.PublicStatusName).ToLowerInvariant();

        return($"<span class='product-tile-status {statusClassName}'>{name}</span>");
    }
    /// <summary>
    /// Returns tags with actual price and standard price if any.
    /// </summary>
    private string GetPriceResultView(SearchResult result, SKUInfo skuInfo)
    {
        ProductCatalogPrices skuPrice = GetProductCatalogPrices(skuInfo);

        if (skuPrice == null)
        {
            return($"<div class='product-tile-info'><span class='product-tile-price'>${result.Document["skuprice"]}</span>");
        }

        var tagResult = new StringBuilder();

        tagResult.AppendFormat("<div class='product-tile-info'><span class='product-tile-price'>${0}</span>", skuPrice.Price);

        if (skuPrice.Discounts.Any())
        {
            tagResult.AppendFormat("<span class='product-tile-list-price'>${0}</span>", skuPrice.StandardPrice);
        }

        tagResult.Append("</div>");

        return(tagResult.ToString());
    }
    /// <summary>
    /// Returns tags with rating.
    /// </summary>
    private string GetRatingResultView(SearchResult result)
    {
        double documentRatingValue;
        double documentRatings;

        Double.TryParse(result.Document["documentratingvalue"]?.ToString() ?? "0", out documentRatingValue);
        Double.TryParse(result.Document["documentratings"]?.ToString() ?? "1", out documentRatings);

        var rating = documentRatingValue / ((Math.Abs(documentRatings) < 0) ? 1 : documentRatings);

        var tagResult = new StringBuilder();

        tagResult.Append("<div class='product-rating-content'>");

        for (int i = 0; i < 5; ++i)
        {
            tagResult.AppendFormat("<span class='rating-star cms-icon-80 {0}'></span>", ((rating > (i / 5.0)) ? "icon-star-full" : "icon-star-empty"));
        }

        tagResult.Append("</div>");

        return(tagResult.ToString());
    }