import {
  LisioBooleanParameterNames,
  LisioParameterNames,
} from "@lisio/lisio-profils";

import { Lisio } from "../../lisio";
import { lisioFeatureMessageHandler } from "./lisio-feature-message-handler";

function lisioBulkFeaturesMessageHandler(this: Lisio, datas: string) {
  this.mutationObserverController.disconnectObserver();
  const {
    bulk,
    isReallyActive,
    isConfigured,
  }: {
    bulk: [
      {
        feature: LisioParameterNames;
        value: boolean | number | string;
        defaultValue: boolean | number | string;
      },
    ];
    isReallyActive: boolean;
    isConfigured: boolean;
  } = JSON.parse(datas);
  if (this.textTreeWalker.texts.size == 0) {
    this.textTreeWalker.getTextes();
  }
  const hasBookPageOrReadingMode = (
    [
      LisioBooleanParameterNames.BOOK_PAGE,
      LisioBooleanParameterNames.READING_MODE,
    ] as LisioParameterNames[]
  ).includes(bulk[0].feature);
  if (!this.isBookPage && !this.isReadingMode && hasBookPageOrReadingMode) {
    if (
      bulk[0].value &&
      window.localStorage.getItem("lisio_reading_mode") == undefined
    ) {
      bulk.shift();
    } else if (
      window.localStorage.getItem("lisio_reading_mode") === "1" &&
      bulk[0] != undefined
    ) {
      const strigifiedDatas = JSON.stringify({
        feature: bulk[0].feature,
        value: bulk[0].value,
        defaultValue: bulk[0].defaultValue,
        isReallyActive,
        isConfigured,
      });
      this.mutationObserverController.modifyPendingProcess(1);
      lisioFeatureMessageHandler.bind(this)(strigifiedDatas);
      this.mutationObserverController.modifyPendingProcess(-1);
    } else if (this.confirmationModal.isEnabled && !bulk[0].value) {
      this.confirmationModal.closeButton?.click();
    }
  } else if (
    (this.isBookPage || this.isReadingMode) &&
    hasBookPageOrReadingMode
  ) {
    if (bulk[0].value) {
      bulk.shift();
    } else {
      console.log("close all");
    }
  }
  // if(hasBookPageOrReadingMode){
  //   const strigifiedDatas = JSON.stringify({
  //       feature : bulk[0].feature,
  //       value : bulk[0].value,
  //       defaultValue : bulk[0].defaultValue,
  //       isReallyActive,
  //       translation,
  //       isConfigured,
  //     });
  //   lisioFeatureMessageHandler.bind(this)(strigifiedDatas);
  // }else{
  if (
    (!this.confirmationModal.isEnabled && !hasBookPageOrReadingMode) ||
    this.isBookPage ||
    this.isReadingMode
  )
    for (const { feature, value, defaultValue } of bulk) {
      const strigifiedDatas = JSON.stringify({
        feature,
        value,
        defaultValue,
        isReallyActive,
        isConfigured,
      });
      this.mutationObserverController.modifyPendingProcess(1);
      lisioFeatureMessageHandler.bind(this)(strigifiedDatas);
      this.mutationObserverController.modifyPendingProcess(-1);
    }
  // }
}

export { lisioBulkFeaturesMessageHandler };
