async function getRelatedProducts() {
    let productId = CCRZ.productDetailModel.attributes.product.prodBean.id;
    let rpRemote = _.extend(CCRZ.RemoteInvocation, { className: 'B2C_ProductDetailPageController' });
    return new Promise(function(resolve, reject) {
        rpRemote.invokeCtx('getRelatedProducts', productId, function(resp, evt){
            if (resp && resp.success && resp.data != null) {
                if(resp.data.hasOwnProperty('Products')) {
                    populateRelatedProductsContent(resp.data);
                }
            }else {
                reject(err);
            }
        },
        {
            nmsp: false,
            buffer: true
        })
    });
}
function populateRelatedProducts() {
    getRelatedProducts();
    getCanonicalPath();
}

function populateRelatedProductsContent(data) {
    var lData = getRPData(data);
    if(lData && lData.length > 0) {
        var lTemplateScript = $("#ProductDetail-RelatedProducts").html();
        var lTemplate = Handlebars.compile(lTemplateScript);
        var lCompiledHtml = lTemplate(lData);
        $('#PDPRelatedProducts').html(lCompiledHtml);
    }
    CCRZ.pubSub.trigger('relatedProducts:rendered');
}

function getRPData(data) {
    let products = [];
    
    for (const [key, value] of Object.entries(data.Products)) {
        let medias = value.EProductMediasS.filter(function(media) {
            return media.mediaType === 'Product Image';
        });
        
        value.productImage = medias[0];
        products.push(value);
    }
    return products;
}

function getCanonicalPath(){
    let productId = CCRZ.productDetailModel.attributes.product.prodBean.id;
    let rpRemote = _.extend(CCRZ.RemoteInvocation, { className: 'B2C_ProductDetailPageController' });
    return new Promise(function(resolve, reject) {
        rpRemote.invokeCtx('getCanonicalPath', productId, function(resp, evt){
            if (resp && resp.success && resp.data != null) {
                $('.view-all-link').text(`View all ${resp.data.path}`);
                
                let hrefBuilder = "";
                if(!B2C_UrlUtility.isProdUrl()){
                    hrefBuilder += "/Store";
                }
                
                hrefBuilder += `/ccrz__ProductList?viewState=ListView&cartID=${CCRZ.pagevars.currentCartID}&cclcl=${CCRZ.pagevars.queryParams.cclcl}&categoryId=${resp.data.catId}`
                $('.view-all-link').attr('href', hrefBuilder);

                if (CCRZ.menuView?.hasRendered) {
                    CCRZ.menuView.setCurrentNavigation(resp.data.catId);
                } else {
                    CCRZ.pubSub.once('view:Menu:refresh', () => CCRZ.menuView.setCurrentNavigation(resp.data.catId));
                }
            }else {
                console.log('Could Not get Canonical Path');
            }
            },
                    {
                nmsp: false,
                    buffer: true
            })
        });
    }

    CCRZ.pubSub.once('view:productDetailView:constructed', function (viewProto) {
		populateRelatedProducts();
	});	