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);
        $('#contentAsideContainer').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);
            }else {
                console.log('Could Not get Canonical Path');
            }
            },
                    {
                nmsp: false,
                    buffer: true
            })
        });
    }
                       
                       CCRZ.pubSub.on('view:relatedProducts:refresh', function () {
        if(!CCRZ.productDetailModel.get('relatedProductsLoaded') ) {
            CCRZ.productDetailModel.set('relatedProductsLoaded', true);
            populateRelatedProducts();
        }
    });