import LisioPopinNames from "./enums/lisio-popin-names";
import { LisioConfig } from "./lisio-config";

const isExtensionInstalled =
  document.documentElement.dataset.lisioExtension != undefined;

// const lisioFetchURL = "https://www.mobiledition.com/verifToken.php";
//const lisioFetchURL = "https://www.adaptiweb.com/verifToken.php";
if (!isExtensionInstalled) {
  const lisio_ua = window.navigator.userAgent;
  const lisio_is_IE = /MSIE|Trident/.test(lisio_ua);

  if (document.readyState !== "loading") {
    lisioCheckIE();
  } else {
    document.addEventListener("DOMContentLoaded", lisioCheckIE);
  }

  function lisioCheckIE() {
    document.removeEventListener("DOMContentLoaded", lisioCheckIE);
    if (lisio_is_IE) {
      const lisio_style = document.createElement("style");
      lisio_style.innerText +=
        "#lisio-label{position: fixed; width: 80px; z-index: 99999999999999999999999999; cursor: pointer; right : 0;top : 49%; transition: right 0.5s ease-out;} #lisio-widget{position: fixed; top :0vh; width: 400px; height: 100vh; z-index: 999999999999999999999999999; right:-400px;transition: right 0.5s ease-out;display:flex; flex-direction: column; align-items:center; justify-content:center; background-color: #fff; border: 2px solid black;} #lisio-label.active{right : 400px; transition: right 0.5s ease-out; padding:0 8px;} #lisio-widget.active{right : 0px; transition: right 0.5s ease-out;}";
      document.head.appendChild(lisio_style);
      const lisio_img = document.createElement("img");
      lisio_img.src =
        import.meta.env.VITE_LISIO_DOMAIN +
        "solution/dist-site/assets/label-2-0.png";
      lisio_img.id = "lisio-label";
      // lisio_img.addEventListener("click", lisioPopUp);
      document.body.appendChild(lisio_img);
      const lisio_div = document.createElement("div");
      lisio_div.id = "lisio-widget";
      lisio_div.innerHTML +=
        '<p>Votre navigateur est obsolète</p>Lisio ne peut pas fonctionner<p></p><p>Veuillez télécharger un des navigateurs suivant :</p><a href="https://support.microsoft.com/fr-fr/microsoft-edge/t%C3%A9l%C3%A9charger-le-nouveau-microsoft-edge-bas%C3%A9-sur-chromium-0f4a3dd7-55df-60f5-739f-00010dba52cf">Micorsoft Edge</a><a href="https://www.google.fr/chrome/?brand=CHBD&brand=FKPE&gclsrc=aw.ds&&gclid=Cj0KCQiAzsz-BRCCARIsANotFgOzKkjHNMl4G9Rzwu1lHgQmaEx6v_fyIBjtndi7s44k-QS007kxWtcaAhQwEALw_wcB">Chrome</a><a href="https://www.mozilla.org/fr/firefox/new/">Mozilla Firefox</a><a href="https://www.opera.com/fr/download">Opera</a><p>Merci de votre compréhension</p>';
      document.body.appendChild(lisio_div);
    } else {
      startLisio();
    }
  }

  function startLisio() {
    const lisioFetchURL = `${import.meta.env.VITE_PHP_SERVER}/verifToken.php`;
    // const lisioFetchURL = "https://env-preprod-mobiledition.lisio.fr/verifToken.php";
    //   const lisioTest = "";
    const mode: RequestMode = "cors";
    const lisioFetchOptions = {
      header: {
        "Content-Type": "application/json",
      },
      mode,
      method: "POST",
      body: JSON.stringify({
        token:
          __BUILD_SUB_TARGET__ === "dev"
            ? import.meta.env.VITE_ACCESSKEY === ""
              ? window.lisioAccesskey
              : import.meta.env.VITE_ACCESSKEY
            : window.lisioAccesskey,
        url:
          __BUILD_SUB_TARGET__ === "dev"
            ? import.meta.env.VITE_URL
            : window.location.toString() === "about:blank"
              ? window.opener.location.toString()
              : window.location.toString(),
      }),
    };
    fetch(lisioFetchURL, lisioFetchOptions)
      .then((res) => {
        return res.json();
      })
      .then(async (dataJSON) => {
        if (dataJSON.display != -1 && dataJSON.display != 0) {
          const data = dataJSON;
          const { lisioConfig } = await import("./lisio-config");
          //mettre à jour le fichier config
          lisioConfig.userSettings.display = data.display;
          lisioConfig.userSettings.colorPrimary =
            data.colorPrimary != "NULL" ? data.colorPrimary : "#15548a";
          lisioConfig.userSettings.colorEcolo =
            data.colorEcolo != "NULL" ? data.colorEcolo : "#3e7040";
          lisioConfig.userSettings.positionX =
            data.positionX != "NULL" ? data.positionX : "R";
          lisioConfig.userSettings.positionY =
            data.positionY != "NULL" ? data.positionY : "50%";
          lisioConfig.userSettings.positionMobileX =
            data.positionMobileX != "NULL" ? data.positionMobileX : "R";
          lisioConfig.userSettings.positionMobileY =
            data.positionMobileY != "NULL" ? data.positionMobileY : "50%";
          lisioConfig.userSettings.vPopin =
            data.vPopin != "NULL" ? data.vPopin : "default";
          lisioConfig.userSettings.tabsToHide = data.tabsToHide;
          if (lisioConfig.userSettings.tabsToHide.includes("zoom")) {
            lisioConfig.userSettings.tabsToHide.push(
              "glassX2",
              "glassX4",
              "sur_zom",
            );
          }
          if (lisioConfig.userSettings.positionY === "10000px" && !lisioConfig.userSettings.tabsToHide.includes("popup-desktop")) {
            lisioConfig.userSettings.tabsToHide.push("popup-desktop");
          }
          if (lisioConfig.userSettings.positionMobileY === "10000px" && !lisioConfig.userSettings.tabsToHide.includes("popup-mobile")) {
            lisioConfig.userSettings.tabsToHide.push("popup-mobile");
          }

          lisioConfig.userSettings.top_bar_img = data.topBarImg; // only VIP

          lisioConfig.userSettings.priorizedLanguages = data.priorizedLanguages;

          lisioConfig.userSettings.vocalSynthesisMode = data.vocalSynthesisMode
            ? (Number.parseInt(data.vocalSynthesisMode) as 0 | 1)
            : 0;
          lisioConfig.userSettings.clientLogo =
            data.clientLogo != "NULL" && data.clientLogo != undefined
              ? `${import.meta.env.VITE_LISIO_DOMAIN}/solution/logo-client/${data.clientLogo}`
              : undefined;
          if (__BUILD_TARGET__ === "site") {
            lisioMakeWidget(lisioConfig);
          }
        }
      })
      .catch((error) => {
        console.log(error);
      });
  }

  async function lisioMakeWidget(lisioConfig: LisioConfig) {
    const { LisioPopinFactory } = await import("./popins/lisio-popin-factory");

    const display = Number.parseInt(lisioConfig.userSettings.display);

    const isSafeTrans = (
      lisioConfig.userSettings.tabsToHide as string[]
    ).includes("tradGoogle");

    const isMobile = window.matchMedia(
      "screen and (min-width: 200px) and (max-width: 960px)",
    ).matches;

    const lisioPopinFactory = new LisioPopinFactory();

    const lisioPopinName =
      lisioConfig.userSettings.vPopin == "default"
        ? "popin2025"
        : lisioConfig.userSettings.vPopin;
    await lisioPopinFactory.createPopin(
      lisioConfig,
      display,
      isMobile,
      isSafeTrans,
      lisioPopinName as LisioPopinNames,
      lisioConfig.userSettings.colorPrimary,
      lisioConfig.userSettings.colorEcolo,
      lisioConfig.userSettings.tabsToHide,
      lisioConfig.userSettings.clientLogo
    );
    // @ts-expect-error Specific case
    if (window.Turbo != undefined || window.Turbolinks != undefined) {
      document.addEventListener(
        // @ts-expect-error Specific case
        window.Turbo ? "turbo:load" : "turbolinks:load",
        async () => {
          if (lisio_ua) {
            const alreadyExistingWidget = document
              .querySelector("#lisio-shadow-env")
              ?.shadowRoot?.querySelector("#lisio-widget");
            try {
              if (LisioPopinFactory && alreadyExistingWidget == undefined) {
                const popinFactory = new LisioPopinFactory();
                await popinFactory.createPopin(
                  lisioConfig,
                  display,
                  isMobile,
                  isSafeTrans,
                  lisioPopinName as LisioPopinNames,
                  lisioConfig.userSettings.colorPrimary,
                  lisioConfig.userSettings.colorEcolo,
                  lisioConfig.userSettings.tabsToHide,
                );
              }
            } catch (e) {
              console.log("Lisio : erreur au chargement : " + e);
            }
          }
        },
      );
    }
  }
}

export type {LisioConfig};