/* Minification failed. Returning unminified contents.
(1,50-51): run-time error JS1100: Expected ',': =
(12,39-40): run-time error JS1100: Expected ',': =
(44,28-29): run-time error JS1195: Expected expression: >
 */
function deferUntil(condition, callback, retries = 500) {
    if (condition()) {
        callback();
    } else if (retries > 0) {
        setTimeout(function () {
            deferUntil(condition, callback, retries - 1)
        }, 10);
    };
};

// custom date formatter for insights list block
function dateFormat(date, short_month = false) {
    const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    const monthNames_short = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"];
    if (date.match('T')) {
        let msec = Date.parse(date);
        if (!isNaN(msec)) {
            const d = new Date(msec);
            var dd = d.getDate();
            var month = "";
            if (!short_month) {
                month = monthNames[d.getMonth()];
            }
            else {
                month = monthNames_short[d.getMonth()];
            }
            var formatted = [(dd > 9 ? '' : '0') + dd, month, , d.getFullYear()].join(' ');
            return formatted;
        } else {
            return date;
        }
    } else {
        return date;
    }
}

/*
usage:

checkArrayIndex([1,2,3,4],4); outputs: false
checkArrayIndex([1,2,3,4],2); outputs: true
*/
function checkArrayIndex(array, index) {
    return (array, index) => Array.isArray(array) && array.hasOwnProperty(index);
}

function contentRecommendations(apikey, filter) {

    for (var x = 0; x < data_rpp.length; x++) {
        var item = data_rpp[x];
        var key = item.key;
        var value = item.value;
        data_rpp_sum += value;
        data_rpp_numbers.push(value);
        data_rpp_elements.push(key);
    }

    var insightsListBlockTemplate = '{{#content}}\
                        <div class="e-recommendation idio-recommendations">\
                            <h3><a href="{{link_url}}">{{title}}</a></h3>\
                            <span class="e-author-name">{{metadata.tags.idio.author_preview_image_alt}}</span>\
                            <span class="idio-date">{{metadata.tags.article.published_time}}</span>\
                        </div>\
                    {{/content}}';
    var homePagePageInsightsBlockTemplate = '{{#content}}\
                        <!-- image card block component -->\
                        <div class="e-image-card-block homecardblock idio-recommendations" style="background-image: url(\'{{metadata.tags.idio.preview_image_url}}\')">\
                          <div class="e-image-card-content">\
                            <a href="{{link_url}}">\
                              <h3>{{metadata.tags.idio.category_tag_primary}}</h3>\
                              <h4>{{title}}</h4>\
                              <div class="e-image-card-authors">\
                                {{#metadata.tags.idio.author_preview_image}}\
                                    <picture>\
                                        <img src="{{metadata.tags.idio.author_preview_image}}?mode=crop&format=webp&width=375&quality=80" alt="{{metadata.tags.idio.author_preview_image_alt}}" loading="lazy">\
                                    </picture>\
                                    <script type="application/ld+json">\
                                    {\
                                        "@context": "https://schema.org",\
                                        "@type": "ImageObject",\
                                        "contentUrl": "{{metadata.tags.idio.author_preview_image}}"\
                                    }\
                                    </script>\
                                {{/metadata.tags.idio.author_preview_image}}\
                                {{#metadata.tags.idio.author_preview_image_alt}}\
                                  <p>\
                                    <span>{{metadata.tags.idio.author_preview_image_alt}}</span>\
                                    {{#metadata.tags.idio.author_role}}\
                                      <br/>\
                                      <small>{{metadata.tags.idio.author_role}}</small>\
                                    {{/metadata.tags.idio.author_role}}\
                                  </p>\
                                {{/metadata.tags.idio.author_preview_image_alt}}\
                              </div>\
                            </a>\
                          </div>\
                        </div>\
                        <!-- END image card block component -->\
                {{/content}}';
    var cardBlockTemplate = '{{#content}}\
        <div class="e-card-block cardblock idio-recommendations">\
            <div class="e-card-block-image" style="background-image: url(\'{{metadata.tags.idio.preview_image_url}}\')">\
                {{#metadata.tags.idio.cardlabel}}\
                <span class="e-category-label">{{metadata.tags.idio.cardlabel}}</span>\
                {{/metadata.tags.idio.cardlabel}}\
            </div>\
            <div class="e-card-content">\
                <div>\
                    <h4 class="e-card-title"><a href="{{link_url}}">{{title}}</a></h4>\
                    <div class="e-card-authors">\
                        <div>\
                            {{#metadata.tags.idio.author_preview_image}}\
                                <picture>\
                                    <img alt="{{metadata.tags.idio.author_preview_image_alt}}" loading="lazy" src="{{metadata.tags.idio.author_preview_image}}?mode=crop&amp;width=750&amp;quality=80">\
                                </picture>\
                                <script type="application/ld+json">\
                                    {\
                                        "@context": "https://schema.org",\
                                        "@type": "ImageObject",\
                                        "contentUrl": "{{metadata.tags.idio.author_preview_image}}"\
                                    }\
                                </script>\
                            {{/metadata.tags.idio.author_preview_image}}\
                                <p>{{metadata.tags.idio.author_preview_image_alt}}</p>\
                        </div>\
                    </div>\
                        <span class="e-date idio-date">{{metadata.tags.article.published_time}}</span>\
                        <span class="e-heading-underline"></span>\
                        <p class="e-card-blurb">{{metadata.tags.idio.abstract}}</p>\
                    </div>\
                    <div>\
                        <a href="{{link_url}}" class="e-caret-link">Read More</a><br>\
                        <div class="e-tags-container idio-e-tags">\
                            <a href="{{metadata.tags.idio.category_tag_url}}" class="e-tag idio-tag">{{metadata.tags.idio.category_tag}}</a>\
                        </div>\
                    </div>\
                </div>\
            </div>\
    {{/content}}';

    return {
        rpp: data_rpp_sum, // 25 max
        api_key: apikey,
        //filter: filter,
        finish: function (apiResponse, statusCode, trackLinksFunction, renderFunction) {
            deferUntil(
                function () {
                    return typeof jQuery != "undefined" && (jQuery('.e-card-blocks').length || jQuery('.e-recommendations-block').length);
                },
                function () {

                    var content = apiResponse.content, rec = apiResponse.recommendation_id;
                    var firstindex = 0;
                    var lastindex = 0;
                    for (var f = 0; f < data_rpp_numbers.length; f++) {
                        lastindex += data_rpp_numbers[f];
                        var response = { content: content.slice(firstindex, lastindex), recommendation_id: rec };
                        // check if element exists in data_rpp_elements for same index
                        // of slicer
                        if (checkArrayIndex(data_rpp_elements, f)) {
                            switch (data_rpp_elements[f]) {
                                case ".e-recommendations-block":
                                    // insights list block render
                                    var a = jQuery(renderFunction(response, statusCode, insightsListBlockTemplate));
                                    jQuery('.e-recommendations-block.idio-recommendations').append(a);
                                    jQuery('.e-recommendation.idio-recommendations').unwrap();
                                    jQuery('.idio-date').each(function (i) {
                                        jQuery(this).html(dateFormat(jQuery(this).html()));
                                    })
                                    break;
                                case ".e-card-blocks homecardblock idio-recommendations":
                                    // homepage cardblock render
                                    var a = jQuery(renderFunction(response, statusCode, homePagePageInsightsBlockTemplate));
                                    jQuery('.e-card-blocks.homecardblock.idio-recommendations').append(a);
                                    jQuery('div.e-image-card-block.idio-recommendations').unwrap();
                                    break;
                                case ".e-card-blocks cardblock idio-recommendations":
                                    // cardblock render
                                    var a = jQuery(renderFunction(response, statusCode, cardBlockTemplate));
                                    jQuery('.e-card-blocks.cardblock.idio-recommendations').append(a);
                                    jQuery('div.e-card-block.cardblock.idio-recommendations').unwrap();
                                    jQuery('.idio-date').each(function (i) {
                                        jQuery(this).html(dateFormat(jQuery(this).html(), true));
                                    })
                                    jQuery('.idio-tag').each(function(i) {
                                        if (jQuery(this).html().match(',')) {
                                          var _parent = jQuery(this).parent();
                                          var tags = jQuery(this).html().split(',');
                                          var link = jQuery('a.idio-tag:eq('+ i+')').attr('href').split(',');
                                          jQuery(this).remove();
                                          for(i=0; i < tags.length && i < 2; i++) {
                                            _parent.append('<a href="'+ link[i] + '" class="e-tag idio-tag">'+ tags[i]+'</a>')
                                          }
                                        }
                                    })
                                    break;
                                default: console.log('processing unknown element');
                            }
                        }


                        firstindex = lastindex;
                    }
                }
            )
        }
    }
}


jQuery(document).ready(function () {
    _ipc = [contentRecommendations(data_api_key, "")];
    if (!ipJSFired) {
        runIP();
    }
});


function runIP() {
    ipJSFired = true;
    // include ip.js
    !function (d, s) {
        if(is_production) {
            var ip = d.createElement(s);
            // data_content_environment defined in ContentRecommendationsService
            ip.async = 1;
            s = d.getElementsByTagName(s)[0];
            ip.src = ['//s.', data_content_environment, '/ip.js'].join('');
            s.parentNode.insertBefore(ip, s);
        }
    }(document, 'script');
};
