function initializeCookiesAndChat(e){
  copyInsightsLWCCookies()
  initializeChatSession(e);
}
function initializeChatSession(e) {
  if ("undefined" == typeof embedded_svc) {
    setTimeout(initializeChatSession, 1e3, e);
    return;
  }
  initESW("https://service.force.com", [
    {
      label: "cm_session_id",
      value: e.detail,
      displayToAgent: !1,
      transcriptFields: ["BOT_User_SessionID__c"],
    },
    {
      label: "BOTInitiatedPageURL",
      value: window.location.href,
      displayToAgent: true,
      transcriptFields: ["BOTInitiatedPageURL__c"],
    }
  ]);
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
      var c = ca[i];
      while (c.charAt(0) == ' ') c = c.substring(1, c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
  }
  return null;
};

//Get domain from the url
function readDomain() {
  var hostname = new URL(document.URL).host
  var host_parts = hostname.split('.')
  var length = host_parts.length
  var domain = hostname;
  if (length > 2) {
      domain = '.' + host_parts[length - 2] + '.' + host_parts[length - 1]
  }
  return domain;
}

function copyInsightsLWCCookies()
{  
  var domain = readDomain();
  var insightSessionCookie = readCookie('LSKey-c$insight_session');  
  if(insightSessionCookie)
  {
    var date = new Date(Date.now() +(10 * 365 * 24 * 60 * 60 * 1000));// 10 years    
    document.cookie = ['insight_session', insightSessionCookie].join('=') + "; expires=" + date.toGMTString() + "; domain=" + domain + "; path=/;secure;";
  }
  var insightSelfsvcSessionCookie = readCookie('LSKey-c$insight_selfsvc_session');  
  if(insightSelfsvcSessionCookie)
  {
    var date = new Date(Date.now() + 2 * (60 * 60 * 1000)); //2 hours
    document.cookie = ['insight_selfsvc_session', insightSelfsvcSessionCookie].join('=') + "; expires=" + date.toGMTString() + "; domain=" + domain + "; path=/;secure;";
  }
}

function initESW(e, t) {

  embedded_svc.settings.displayHelpButton = true;
  embedded_svc.settings.language = "en_US";
  embedded_svc.settings.extraPrechatFormDetails = t;
  embedded_svc.settings.enabledFeatures = ["LiveAgent"];
  embedded_svc.settings.entryFeature = "LiveAgent";
  embedded_svc.settings.defaultMinimizedText = "Start Chat";
  embedded_svc.settings.disabledMinimizedText = "Chat Unavailable";
  embedded_svc.settings.displayHelpButton = true;
  embedded_svc.settings.chatbotAvatarImgURL = "https://prod.static.citrix.com/images/chatbot/chat_header_rebranded.png"

  if (window.location.href.includes('dev.support')) {
    embedded_svc.init(
      "https://citrite--fdev.sandbox.my.salesforce.com",
      "https://citrite--fdev.sandbox.my.site.com/consulting",
      e,
      "00D8F000000uQCx",
      "Deployment_for_WWSS",
      {
        baseLiveAgentContentURL:
          "https://c.la5-c1cs-ia4.salesforceliveagent.com/content",
        deploymentId: "57260000000TNv2",
        buttonId: "5734z000000wk6v",
        baseLiveAgentURL: "https://d.la5-c1cs-ia4.salesforceliveagent.com/chat",
        eswLiveAgentDevName:
          "EmbeddedServiceLiveAgent_Parent04I6w000000CaYDEA0_17b540cf6e3",
        isOfflineSupportEnabled: !1,
      }
    );
  }
  else if (window.location.href.includes('preprod.support')) {
    // add preprod embedded_svc init details 
  }
  else if (window.location.href.includes('staging.support')) {
    embedded_svc.init(
      'https://citrite--ftest.sandbox.my.salesforce.com',
      'https://citrite--ftest.sandbox.my.site.com/consulting',
      e,
      '00DDL00000Cs93B',
      'Deployment_for_WWSS',
      {
        baseLiveAgentContentURL: 'https://c.la1-c1cs-ia6.salesforceliveagent.com/content',
        deploymentId: '57260000000TNv2',
        buttonId: '5734z000000wk6v',
        baseLiveAgentURL: 'https://d.la1-c1cs-ia6.salesforceliveagent.com/chat',
        eswLiveAgentDevName: 'EmbeddedServiceLiveAgent_Parent04I6w000000CaYDEA0_17b540cf6e3',
        isOfflineSupportEnabled: !1,
      }
    );

  }
  else {
    // add prod embedded_svc init details
  }
  SendBotInsightsEvents();
}

function ConnectToLiveAgent(e) {
  e.detail.push(
    {
      label: "BOTInitiatedPageURL",
      value: window.location.href,
      displayToAgent: true,
      transcriptFields: ["BOTInitiatedPageURL__c"],
    }
  );
  initESW("https://service.force.com", e.detail);

  document.querySelector(".helpButtonEnabled").children[0].click();
}

window.addEventListener(
  "DOMContentLoaded",
  function () {
    console.log("Page fully loaded.");
    window.addEventListener("ConnectToLiveAgent", ConnectToLiveAgent, !1);
    window.addEventListener(
      "InitializeChatSession",
      initializeCookiesAndChat,
      !1
    );
    console.log("Event listeners added.");
  },
  !1
);

//-- code to send insights events
function SendBotInsightsEvents() {
  try {
    if (embedded_svc.addedEventListners) {
      return;
    }
    else {
      embedded_svc.addedEventListners = true;
    }

    //console.log("ChatBOT IF Events Initialize");
    var onHelpButtonClickHandler = function () {
      let userId = sessionStorage.getItem("user_id");
      sendInsightsEvents(userId, "interacted", "Start chat button", {
        chatBotName: "Einstein",
      });
    };
    embedded_svc.addEventHandler("onHelpButtonClick", onHelpButtonClickHandler);

    var onChatRequestSuccessHandler = function (data) {
      let userId = sessionStorage.getItem("user_id");
      sendInsightsEvents(userId, "launched", "Chat request success", {
        sessionKey: data.liveAgentSessionKey,
        chatBotName: "Einstein",
      });
    };
    embedded_svc.addEventHandler("onChatRequestSuccess", onChatRequestSuccessHandler);


    var onIdleTimeoutOccurredHandler = function (data) {
      let userId = sessionStorage.getItem("user_id");
      sendInsightsEvents(userId, "error", "Idle timeout occurred", {
        sessionKey: data.liveAgentSessionKey,
        chatBotName: "Einstein",
      });
    };
    embedded_svc.addEventHandler("onIdleTimeoutOccurred", onIdleTimeoutOccurredHandler);


    var onConnectionErrorHandler = function (data) {
      let userId = sessionStorage.getItem("user_id");
      sendInsightsEvents(userId, "error", "Connection error occurred", {
        sessionKey: data.liveAgentSessionKey,
        chatBotName: "Einstein",
      });
    };
    embedded_svc.addEventHandler("onConnectionError", onConnectionErrorHandler);

    var onChatEndedByChasitorHandler = function (data) {
      let userId = sessionStorage.getItem("user_id");
      sendInsightsEvents(userId, "suspended", "Chat ended by user", {
        sessionKey: data.liveAgentSessionKey,
        chatBotName: "Einstein",
      });
    };
    embedded_svc.addEventHandler("onChatEndedByChasitor", onChatEndedByChasitorHandler);

    var onChatEndedByAgentHandler = function (data) {
      let userId = sessionStorage.getItem("user_id");
      sendInsightsEvents(userId, "suspended", "Chat ended by agent", {
        sessionKey: data.liveAgentSessionKey,
        chatBotName: "Einstein",
      });
    };
    embedded_svc.addEventHandler("onChatEndedByAgent", onChatEndedByAgentHandler);

    var afterDestroyHandler = function () {
      let userId = sessionStorage.getItem("user_id");
      sendInsightsEvents(userId, "terminated", "Chat ended", {
        chatBotName: "Einstein",
      });
    };
    embedded_svc.addEventHandler("afterDestroy", afterDestroyHandler);

    var onChatEndedByChatbotHandler = function (data) {
      let userId = sessionStorage.getItem("user_id");
      sendInsightsEvents(userId, "suspended", "Chat ended by chatbot", {
        sessionKey: data.liveAgentSessionKey,
        chatBotName: "Einstein",
      });
    };
    embedded_svc.addEventHandler("onChatEndedByChatbot", onChatEndedByChatbotHandler);
  } catch (e) {
    console.log("Chat bot IF events failed", e);
  }
}