com.vmc.core.namespace('com.vmc.plans.params');
com.vmc.plans.params.translatedMessages = {"response": {"status": "SUCCESS","statuscode": "VMPSSTS0000","statusdescr": "TRANSACTION SUCCESSFUL.","products": [{"PRODUCT_ID":"00-00000","LANGUAGE_CD":"CAC","rates.all.plans":"展示所有計劃","rates.fewer.plans":"展示部分計劃","rates.plans.currentprice":"現價：每月 ","rates.plans.heading":"找一個適合你的計劃","rates.plans.now":"現只需 ","rates.plans.subheading.onbc":"此外，在<a href=\"/en/support/find-a-store.html\" type=\"link\" role=\"link\" title=\"select stores\">分店開台</a>，還送你1000分鐘長途通話*。"}] }};
com.vmc.plans.params.translatedPlanTree = {"response": {"status": "SUCCESS","statuscode": "VMPSSTS0000","statusdescr": "TRANSACTION SUCCESSFUL.","products": [{"PRODUCT_ID":"41-00000","LANGUAGE_CD":"CAC","BYOP.basic.BUCKETDESCRIPTION":"按用量收費的基本計劃，以及3G數據、通話和短訊計劃。","BYOP.basic.BUCKETTITLE":"基本計劃","BYOP.basic.LEGAL":"","BYOP.basic.PLANSELECTBUTTON":"","BYOP.dtt.BUCKETDESCRIPTION":"無限通話和短訊，以及限定的每月數據。","BYOP.dtt.BUCKETTITLE":"4G全國數據計劃","BYOP.dtt.LEGAL":"","BYOP.dtt.PLANSELECTBUTTON":"","BYOP.promo.BUCKETTITLE":"精選計劃","BYOP.promo.LEGAL":"","BYOP.promo.PLANSELECTBUTTON":"","BYOP.unlimited.BUCKETDESCRIPTION":"無限通話、短訊及數據，無需擔心用量超額。","BYOP.unlimited.BUCKETTITLE":"5G無限全國數據計劃","BYOP.unlimited.LEGAL":"","BYOP.unlimited.PLANSELECTBUTTON":""}] }};
com.vmc.plans.params.translatedPlans = {"response": {"status": "SUCCESS","statuscode": "VMPSSTS0000","statusdescr": "TRANSACTION SUCCESSFUL.","products": [{"PRODUCT_ID":"63-02977","LANGUAGE_CD":"CAC","RP_3G":"3G數據速度計劃","RP_DATA":"250MB數據、通話及短訊","RP_MINUTES":"100分鐘撥出電話 + 無限接聽電話","RP_TEXT_MSG":"加拿大全國無限短訊","recurrency":"月"},{"PRODUCT_ID":"63-03034","LANGUAGE_CD":"CAC","RP_3G":"3G數據速度計劃","RP_DATA":"3GB數據、通話及短訊","RP_TEXT_MSG":"加拿大全國無限短訊","recurrency":"月"},{"PRODUCT_ID":"63-03090","LANGUAGE_CD":"CAC","RP_4G":"按用量收費數據以4G LTE提供，速度高達150 Mbps","RP_DATA":"<span class=\"Wrapper\">按用量收費數據</span><span class=\"speednote\"> <a href=\"https://www.virginplus.ca/en/support/faq.html?q=monthly-standard-rates\">查看收費（英文）</a></span>","RP_MINUTES":"加拿大全國無限通話及短訊","RP_NOTE_BOTTOM":"只適用於新開台","recurrency":"月"},{"PRODUCT_ID":"63-03096","LANGUAGE_CD":"CAC","RP_4G":"使用4G LTE網絡，速度高達150 Mbps","RP_CALLD_VMAIL_CALLW_CONFCALL":"來電顯示、留言信箱、來電待接及電話會議","RP_DATA":"10GB數據、通話及短訊","RP_HOTSPOT":"熱點功能","RP_HOTSPOT_TIP":"使用計劃中的數據，您的手機將成為其他設備（如平板電腦和手提電腦）的 Wi-Fi 連接。您必須在設備設置中打開熱點功能，方能使用。","RP_MINUTES":"加拿大全國無限通話及短訊","RP_NOTE_BOTTOM":"只適用於新開台","RP_NOTE_HEADER":"火熱優惠","RP_SDVIDEO":"標清視頻串流","RP_SDVIDEO_TIP":"標清視頻的畫質最高為480p。","RP_TEXT_MSG":"從加拿大發出的無限國際短訊","recurrency":"月"},{"PRODUCT_ID":"63-03097","LANGUAGE_CD":"CAC","RP_4G":"使用4G LTE網絡，速度高達150 Mbps","RP_CALLD_VMAIL_CALLW_CONFCALL":"來電顯示、留言信箱、來電待接及電話會議","RP_DATA":"50GB數據、通話及短訊","RP_HOTSPOT":"熱點功能","RP_HOTSPOT_TIP":"使用計劃中的數據，您的手機將成為其他設備（如平板電腦和手提電腦）的 Wi-Fi 連接。您必須在設備設置中打開熱點功能，方能使用。","RP_MINUTES":"加拿大全國無限通話及短訊","RP_NOTE_BOTTOM":"只適用於新開台","RP_SDVIDEO":"標清視頻串流","RP_SDVIDEO_TIP":"標清視頻的畫質最高為480p。","RP_TEXT_MSG":"從加拿大發出的無限國際短訊","recurrency":"月"},{"PRODUCT_ID":"63-03098","LANGUAGE_CD":"CAC","RP_4G":"使用4G LTE網絡，速度高達150 Mbps","RP_CALLD_VMAIL_CALLW_CONFCALL":"來電顯示、留言信箱、來電待接及電話會議","RP_DATA":"75GB數據、通話及短訊","RP_HOTSPOT":"熱點功能","RP_HOTSPOT_TIP":"使用計劃中的數據，您的手機將成為其他設備（如平板電腦和手提電腦）的 Wi-Fi 連接。您必須在設備設置中打開熱點功能，方能使用。","RP_MINUTES":"加拿大全國無限通話及短訊","RP_NOTE_BOTTOM":"只適用於新開台","RP_SDVIDEO":"標清視頻串流","RP_SDVIDEO_TIP":"標清視頻的畫質最高為480p。","RP_TEXT_CALL_ROAMING":"加美無限通話及短訊 + 美國漫遊服務","RP_TEXT_MSG":"從加拿大發出的無限國際短訊","recurrency":"月"},{"PRODUCT_ID":"63-03099","LANGUAGE_CD":"CAC","RP_4G":"使用4G LTE網絡，速度高達150 Mbps","RP_CALLD_VMAIL_CALLW_CONFCALL":"來電顯示、留言信箱、來電待接及電話會議","RP_DATA":"50GB數據、通話及短訊","RP_HOTSPOT":"熱點功能","RP_HOTSPOT_TIP":"使用計劃中的數據，您的手機將成為其他設備（如平板電腦和手提電腦）的 Wi-Fi 連接。您必須在設備設置中打開熱點功能，方能使用。","RP_MINUTES":"加拿大全國無限通話及短訊","RP_NOTE_BOTTOM":"只適用於新開台","RP_SDVIDEO":"標清視頻串流","RP_SDVIDEO_TIP":"標清視頻的畫質最高為480p。","RP_TEXT_CALL_ROAMING":"加美無限通話及短訊 + 美國漫遊服務","RP_TEXT_MSG":"從加拿大發出的無限國際短訊","recurrency":"月"},{"PRODUCT_ID":"63-03101","LANGUAGE_CD":"CAC","RP_4G":"使用4G LTE網絡，速度高達150 Mbps","RP_CALLD_VMAIL_CALLW_CONFCALL":"來電顯示、留言信箱、來電待接及電話會議","RP_DATA":"20GB數據、通話及短訊","RP_HOTSPOT":"熱點功能","RP_HOTSPOT_TIP":"使用計劃中的數據，您的手機將成為其他設備（如平板電腦和手提電腦）的 Wi-Fi 連接。您必須在設備設置中打開熱點功能，方能使用。","RP_MINUTES":"加拿大全國無限通話及短訊","RP_NOTE_BOTTOM":"只適用於新開台","RP_SDVIDEO":"標清視頻串流","RP_SDVIDEO_TIP":"標清視頻的畫質最高為480p。","RP_TEXT_MSG":"從加拿大發出的無限國際短訊","recurrency":"月"},{"PRODUCT_ID":"63-03102","LANGUAGE_CD":"CAC","RP_4G":"使用4G LTE網絡，速度高達150 Mbps","RP_CALLD_VMAIL_CALLW_CONFCALL":"來電顯示、留言信箱、來電待接及電話會議","RP_DATA":"40GB數據、通話及短訊","RP_HOTSPOT":"熱點功能","RP_HOTSPOT_TIP":"使用計劃中的數據，您的手機將成為其他設備（如平板電腦和手提電腦）的 Wi-Fi 連接。您必須在設備設置中打開熱點功能，方能使用。","RP_MINUTES":"加拿大全國無限通話及短訊","RP_NOTE_BOTTOM":"只適用於新開台","RP_SDVIDEO":"標清視頻串流","RP_SDVIDEO_TIP":"標清視頻的畫質最高為480p。","RP_TEXT_MSG":"從加拿大發出的無限國際短訊","recurrency":"月"},{"PRODUCT_ID":"63-03103","LANGUAGE_CD":"CAC","RP_4G":"使用4G LTE網絡，速度高達150 Mbps","RP_CALLD_VMAIL_CALLW_CONFCALL":"來電顯示、留言信箱、來電待接及電話會議","RP_DATA":"60GB數據、通話及短訊","RP_HOTSPOT":"熱點功能","RP_HOTSPOT_TIP":"使用計劃中的數據，您的手機將成為其他設備（如平板電腦和手提電腦）的 Wi-Fi 連接。您必須在設備設置中打開熱點功能，方能使用。","RP_MINUTES":"加拿大全國無限通話及短訊","RP_NOTE_BOTTOM":"只適用於新開台","RP_NOTE_HEADER":"加拿大-美國","RP_SDVIDEO":"標清視頻串流","RP_SDVIDEO_TIP":"標清視頻的畫質最高為480p。","RP_TEXT_CALL_ROAMING":"加美無限通話及短訊 + 美國漫遊服務","RP_TEXT_MSG":"從加拿大發出的無限國際短訊","recurrency":"月"},{"PRODUCT_ID":"63-03104","LANGUAGE_CD":"CAC","RP_4G":"按用量收費數據以4G LTE提供，速度高達150 Mbps","RP_DATA":"<span class=\"Wrapper\">按用量收費數據</span><span class=\"speednote\"> <a href=\"https://www.virginplus.ca/en/support/faq.html?q=monthly-standard-rates\">查看收費（英文）</a></span>","RP_MINUTES":"加拿大全國無限通話及短訊","RP_NOTE_BOTTOM":"只適用於新開台","recurrency":"月"}] }};   
if (com.vmc.plans.params.translatedMessages.response && com.vmc.plans.params.translatedMessages.response.products && com.vmc.plans.params.translatedMessages.response.products.length > 0) {com.vmc.plans.params.translatedMessages = com.vmc.plans.params.translatedMessages.response.products[0]}
if (com.vmc.plans.params.translatedPlanTree.response && com.vmc.plans.params.translatedPlanTree.response.products && com.vmc.plans.params.translatedPlanTree.response.products.length > 0) {com.vmc.plans.params.translatedPlanTree = com.vmc.plans.params.translatedPlanTree.response.products[0]}
if (com.vmc.plans.params.translatedPlans.response && com.vmc.plans.params.translatedPlans.response.products) { 
    com.vmc.plans.params.translatedPlans = com.vmc.plans.params.translatedPlans.response.products.reduce((accumulator, currentValue) =>  { return {...accumulator, [currentValue.PRODUCT_ID]: currentValue} }, {});
} else { 
    com.vmc.plans.params.translatedPlans = {}
}
	
function applyPlansTranslation(feed, translations) {
  if (feed) {
    feed.forEach(function (value, index) {
      for (let prop in feed[index]) {
        if (Array.isArray(feed[index][prop])) {
          feed[index][prop].forEach(function (value, index2) {
            if (translations[feed[index][prop][index2].productId]) {
              Object.keys(translations[feed[index][prop][index2].productId]).forEach(function (key) {
                if (feed[index][prop][index2]['planFeatures'][key]) {
                  feed[index][prop][index2]['planFeatures'][key]['Desc'] = htmlEncode(translations[feed[index][prop][index2].productId][key]);
                  feed[index][prop][index2]['planFeatures'][key]['TIP'] = htmlEncode(translations[feed[index][prop][index2].productId][key + "_TIP"]) || feed[index][prop][index2]['planFeatures'][key]['TIP'];
                } else if (feed[index][prop][index2]['notDisplay'] && feed[index][prop][index2]['notDisplay'][key]) {
                  feed[index][prop][index2]['notDisplay'][key]['Desc'] = htmlEncode(translations[feed[index][prop][index2].productId][key]);
                  feed[index][prop][index2]['notDisplay'][key]['TIP'] = htmlEncode(translations[feed[index][prop][index2].productId][key + "_TIP"]) || feed[index][prop][index2]['notDisplay'][key]['TIP'];
                } else if (key === 'recurrency' && feed[index][prop][index2].recurrency === 'mo') {
                  feed[index][prop][index2].recurrency = htmlEncode(translations[feed[index][prop][index2].productId][key]);
                }
              });
            }
          });
        }
      }
    });
  }
}

function applyMessageTranslation(data, translations) {
  if (angular && translations) angular.extend(data, translations);
}
  
function applyCategoriesTranslation(data, translations) {
  if (!data || !data.response || !data.response.termgroups || !translations) return false;
  let termgroups = data.response.termgroups;
  termgroups.forEach(function (termgroup) {
    if (termgroup.MEMBERS) {
      termgroup.MEMBERS.forEach(function (plangroup) {
        if (plangroup.MEMBERS) {
          plangroup.MEMBERS.forEach(function (bucket) {
          //the $ is for freemarker!
            let path = `${plangroup.PLANGROUP}.${bucket.NAME}`
            Object.keys(translations)
              .filter(key => key.indexOf(path) === 0)
              .reduce((accumulator, currentValue) => translationBucketKeyValuePairs(translations, currentValue, path, bucket), {});
          })
        }
      })
    }
  });
}

function translationBucketKeyValuePairs(translations, key2, mask, accumulator) {
  if (!translations) return accumulator;
  let key = key2.replace(mask + '.', '');
  if (key.includes('.')) return accumulator;
  Object.assign(accumulator, { [key]:translations[key2] });
  return { ...accumulator, [key]: translations[key2] }
}

function htmlDecode(input) {
    const textArea = document.createElement("textarea");
    textArea.innerHTML = input;
    return textArea.value;
}

function htmlEncode(input) {
    const textArea = document.createElement("textarea");
    textArea.innerText = input;
    return textArea.innerHTML.split("<br>").join("\n");
}

