import styles from "../assets/css/shadowroot/lisio-zoom.css?raw";
import LisioShadowRootController from "../controllers/lisio-shadow-root-controller";
import LisioStyleSheetController from "../controllers/lisio-stylesheet-controller";
import LisioCSSProperties from "../enums/lisio-css-properties";
import LisioTextTreeWalker from "../walkers/lisio-text-tree-walker";
import LisioAdapter from "./lisio-adapter";

// interface LisioArrowCursors {
//   top: string;
//   right: string;
//   bottom: string;
//   left: string;
// }

/**
 * Class representing a zoom adapter extending an adapter.\
 * It aims to represents the font style functionality of Lisio.\
 * A zoom adapter is basically a functionality of Lisio which will change the zoom of texts in the main page.\
 */
class LisioZoomAdapter extends LisioAdapter<number> {
  // private _cursors: LisioArrowCursors = {
  //   top: __BUILD_TARGET__ === "extension" ? "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjgwcHQiIGhlaWdodD0iODBwdCIgdmlld0JveD0iMCAwIDgwIDgwIiB2ZXJzaW9uPSIxLjEiPg0KPGcgaWQ9InN1cmZhY2UxIj4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSAzNy45NzY1NjIgMC42MDE1NjIgQyAzNy45MTQwNjIgMC42MzY3MTkgMzcuODc1IDAuNjkxNDA2IDM3LjgzOTg0NCAwLjczODI4MSBMIDE1LjIzNDM3NSAyMi45NzY1NjIgQyAxNC40OTYwOTQgMjMuNzUgMTQuMjYxNzE5IDI0Ljg2NzE4OCAxNC42MzI4MTIgMjUuODUxNTYyIEMgMTUgMjYuODIwMzEyIDE1Ljg3MTA5NCAyNy41MDc4MTIgMTYuODkwNjI1IDI3LjY0ODQzOCBMIDI3LjY2NDA2MiAyNy42NDg0MzggTCAyNy42NjQwNjIgNTUuMjczNDM4IEMgMjcuNjY0MDYyIDU2LjUyNzM0NCAyOC42OTE0MDYgNTcuNTU0Njg4IDI5Ljk0NTMxMiA1Ny41NTQ2ODggQyAyOS45ODA0NjkgNTcuNTU0Njg4IDMwLjAxOTUzMSA1Ny41NTQ2ODggMzAuMDYyNSA1Ny41NTQ2ODggTCA0OS4xOTUzMTIgNTcuNTU0Njg4IEMgNTAuNDQ5MjE5IDU3LjYwOTM3NSA1MS41MTE3MTkgNTYuNjQ4NDM4IDUxLjU4NTkzOCA1NS40MTAxNTYgQyA1MS41ODU5MzggNTUuMzQ3NjU2IDUxLjU4NTkzOCA1NS4zMDg1OTQgNTEuNTg1OTM4IDU1LjI3MzQzOCBMIDUxLjU4NTkzOCAyNy42NDg0MzggTCA2Mi4zNjMyODEgMjcuNjQ4NDM4IEMgNjMuMzgyODEyIDI3LjUwNzgxMiA2NC4yNSAyNi44MjAzMTIgNjQuNjE3MTg4IDI1Ljg1MTU2MiBMIDY0LjYxNzE4OCAyNC43Njk1MzEgQyA2NC42MTcxODggMjQuMTEzMjgxIDY0LjM2NzE4OCAyMy40NzY1NjIgNjMuOTAyMzQ0IDIyLjk3NjU2MiBMIDQxLjE3OTY4OCAwLjczODI4MSBDIDQwLjMzMjAzMSAtMC4xOTUzMTIgMzguODk4NDM4IC0wLjI1MzkwNiAzNy45NzY1NjIgMC42MDE1NjIgWiBNIDU2LjQ5MjE4OCAyMi44NTU0NjkgTCA0OS4xODc1IDIyLjg1NTQ2OSBDIDQ3Ljg4MjgxMiAyMi44NTU0NjkgNDYuODAwNzgxIDIzLjMzOTg0NCA0Ni44MDA3ODEgMjQuNjU2MjUgTCA0Ni44MDA3ODEgNTIuNzY1NjI1IEwgMzIuNDUzMTI1IDUyLjc2NTYyNSBMIDMyLjQ1MzEyNSAyNC42NTYyNSBDIDMyLjQ1MzEyNSAyMy4zMzk4NDQgMzEuMzcxMDk0IDIyLjg1NTQ2OSAzMC4wNjI1IDIyLjg1NTQ2OSBMIDIyLjc1NzgxMiAyMi44NTU0NjkgTCAzOS42MTMyODEgNi4zNTE1NjIgWiBNIDU2LjQ5MjE4OCAyMi44NTU0NjkgIi8+DQo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gMjcuNjY0MDYyIDYyLjMzOTg0NCBDIDI3LjY2NDA2MiA2My42NTIzNDQgMjguNzI2NTYyIDY0LjczNDM3NSAzMC4wNjI1IDY0LjczNDM3NSBMIDQ5LjE5NTMxMiA2NC43MzQzNzUgQyA1MC41MjM0MzggNjQuNzM0Mzc1IDUxLjU4NTkzOCA2My42NTIzNDQgNTEuNTg1OTM4IDYyLjMzOTg0NCBDIDUxLjU4NTkzOCA2MS4wMDc4MTIgNTAuNTIzNDM4IDU5Ljk0NTMxMiA0OS4xOTUzMTIgNTkuOTQ1MzEyIEwgMzAuMDYyNSA1OS45NDUzMTIgQyAyOC43MjY1NjIgNTkuOTQ1MzEyIDI3LjY2NDA2MiA2MS4wMDc4MTIgMjcuNjY0MDYyIDYyLjMzOTg0NCBaIE0gMjcuNjY0MDYyIDYyLjMzOTg0NCAiLz4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSAyNy42NjQwNjIgNjkuNTAzOTA2IEMgMjcuNjY0MDYyIDcwLjgzNTkzOCAyOC43MjY1NjIgNzEuODk4NDM4IDMwLjA2MjUgNzEuODk4NDM4IEwgNDkuMTk1MzEyIDcxLjg5MDYyNSBDIDUwLjUyMzQzOCA3MS44OTA2MjUgNTEuNTg1OTM4IDcwLjgzNTkzOCA1MS41ODU5MzggNjkuNTAzOTA2IEMgNTEuNTg1OTM4IDY4LjE4NzUgNTAuNTIzNDM4IDY3LjEwNTQ2OSA0OS4xOTUzMTIgNjcuMTA1NDY5IEwgMzAuMDYyNSA2Ny4xMDU0NjkgQyAyOC43MjY1NjIgNjcuMTA1NDY5IDI3LjY2NDA2MiA2OC4xODc1IDI3LjY2NDA2MiA2OS41MDM5MDYgWiBNIDI3LjY2NDA2MiA2OS41MDM5MDYgIi8+DQo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gMjcuNjY0MDYyIDc2LjY3OTY4OCBDIDI3LjY2NDA2MiA3OC4wMTU2MjUgMjguNzI2NTYyIDc5LjA3ODEyNSAzMC4wNjI1IDc5LjA3ODEyNSBMIDQ5LjE5NTMxMiA3OS4wNzgxMjUgQyA1MC41MjM0MzggNzkuMDc4MTI1IDUxLjU4NTkzOCA3OC4wMTU2MjUgNTEuNTg1OTM4IDc2LjY3OTY4OCBDIDUxLjU4NTkzOCA3NS4zNzEwOTQgNTAuNTIzNDM4IDc0LjI4OTA2MiA0OS4xOTUzMTIgNzQuMjg5MDYyIEwgMzAuMDYyNSA3NC4yODkwNjIgQyAyOC43MjY1NjIgNzQuMjg5MDYyIDI3LjY2NDA2MiA3NS4zNzEwOTQgMjcuNjY0MDYyIDc2LjY3OTY4OCBaIE0gMjcuNjY0MDYyIDc2LjY3OTY4OCAiLz4NCjwvZz4NCjwvc3ZnPg0K" : "/solution/dist-site/cursors/top-arrow-verybig.svg",
  //   right: __BUILD_TARGET__ === "extension" ? "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9Ijc1cHQiIGhlaWdodD0iNzVwdCIgdmlld0JveD0iMCAwIDc1IDc1IiB2ZXJzaW9uPSIxLjEiPg0KPGcgaWQ9InN1cmZhY2UxIj4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSA3NC4xNjAxNTYgMzUuODg2NzE5IEMgNzQuMTI4OTA2IDM1LjgzMjAzMSA3NC4wNzAzMTIgMzUuNzkyOTY5IDc0LjAzNTE1NiAzNS43NjE3MTkgTCA1My4wMTk1MzEgMTQuMzkwNjI1IEMgNTIuMjg5MDYyIDEzLjcwMzEyNSA1MS4yMzA0NjkgMTMuNDg0Mzc1IDUwLjI5Njg3NSAxMy44MjgxMjUgQyA0OS4zODY3MTkgMTQuMTc1NzgxIDQ4LjcyNjU2MiAxNC45OTYwOTQgNDguNjAxNTYyIDE1Ljk2NDg0NCBMIDQ4LjYwMTU2MiAyNi4xNDQ1MzEgTCAyMi40OTIxODggMjYuMTQ0NTMxIEMgMjEuMzA4NTk0IDI2LjE0NDUzMSAyMC4zNDM3NSAyNy4xMDkzNzUgMjAuMzQzNzUgMjguMjk2ODc1IEMgMjAuMzQzNzUgMjguMzMyMDMxIDIwLjM0Mzc1IDI4LjM3MTA5NCAyMC4zNDM3NSAyOC40MDYyNSBMIDIwLjM0Mzc1IDQ2LjQ4ODI4MSBDIDIwLjI4OTA2MiA0Ny42NzE4NzUgMjEuMTk5MjE5IDQ4LjY3MTg3NSAyMi4zNjcxODggNDguNzQ2MDk0IEMgMjIuNDE3OTY5IDQ4Ljc0NjA5NCAyMi40NjA5MzggNDguNzQ2MDk0IDIyLjQ5MjE4OCA0OC43NDYwOTQgTCA0OC42MDE1NjIgNDguNzQ2MDk0IEwgNDguNjAxNTYyIDU4LjkyNTc4MSBDIDQ4LjcyNjU2MiA1OS44OTg0MzggNDkuMzg2NzE5IDYwLjcxODc1IDUwLjI5Njg3NSA2MS4wNjI1IEwgNTEuMzIwMzEyIDYxLjA2MjUgQyA1MS45NDE0MDYgNjEuMDYyNSA1Mi41NDI5NjkgNjAuODI4MTI1IDUzLjAxOTUzMSA2MC4zODY3MTkgTCA3NC4wMzUxNTYgMzguOTE0MDYyIEMgNzQuOTE0MDYyIDM4LjExMzI4MSA3NC45NjQ4NDQgMzYuNzYxNzE5IDc0LjE2MDE1NiAzNS44ODY3MTkgWiBNIDUzLjEyNSA1My4zODI4MTIgTCA1My4xMjUgNDYuNDg4MjgxIEMgNTMuMTI1IDQ1LjI0NjA5NCA1Mi42Njc5NjkgNDQuMjIyNjU2IDUxLjQyOTY4OCA0NC4yMjI2NTYgTCAyNC44NjcxODggNDQuMjIyNjU2IEwgMjQuODY3MTg4IDMwLjY2Nzk2OSBMIDUxLjQyOTY4OCAzMC42Njc5NjkgQyA1Mi42Njc5NjkgMzAuNjY3OTY5IDUzLjEyNSAyOS42NDg0MzggNTMuMTI1IDI4LjQwNjI1IEwgNTMuMTI1IDIxLjUxMTcxOSBMIDY4LjcyMjY1NiAzNy40Mzc1IFogTSA1My4xMjUgNTMuMzgyODEyICIvPg0KPHBhdGggc3R5bGU9IiBzdHJva2U6bm9uZTtmaWxsLXJ1bGU6bm9uemVybztmaWxsOnJnYigwJSwwJSwwJSk7ZmlsbC1vcGFjaXR5OjE7IiBkPSJNIDE1LjgxNjQwNiAyNi4xNDQ1MzEgQyAxNC41NzgxMjUgMjYuMTQ0NTMxIDEzLjU1ODU5NCAyNy4xNDg0MzggMTMuNTU4NTk0IDI4LjQwNjI1IEwgMTMuNTU4NTk0IDQ2LjQ4ODI4MSBDIDEzLjU1ODU5NCA0Ny43NDYwOTQgMTQuNTc4MTI1IDQ4Ljc0NjA5NCAxNS44MTY0MDYgNDguNzQ2MDk0IEMgMTcuMDc4MTI1IDQ4Ljc0NjA5NCAxOC4wNzgxMjUgNDcuNzQ2MDk0IDE4LjA3ODEyNSA0Ni40ODgyODEgTCAxOC4wNzgxMjUgMjguNDA2MjUgQyAxOC4wNzgxMjUgMjcuMTQ4NDM4IDE3LjA3ODEyNSAyNi4xNDQ1MzEgMTUuODE2NDA2IDI2LjE0NDUzMSBaIE0gMTUuODE2NDA2IDI2LjE0NDUzMSAiLz4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSA5LjA1MDc4MSAyNi4xNDQ1MzEgQyA3Ljc4OTA2MiAyNi4xNDQ1MzEgNi43ODUxNTYgMjcuMTQ4NDM4IDYuNzg1MTU2IDI4LjQwNjI1IEwgNi43ODUxNTYgNDYuNDg4MjgxIEMgNi43ODUxNTYgNDcuNzQ2MDk0IDcuNzg5MDYyIDQ4Ljc0NjA5NCA5LjA1MDc4MSA0OC43NDYwOTQgQyAxMC4yODkwNjIgNDguNzQ2MDk0IDExLjMxMjUgNDcuNzQ2MDk0IDExLjMxMjUgNDYuNDg4MjgxIEwgMTEuMzEyNSAyOC40MDYyNSBDIDExLjMxMjUgMjcuMTQ4NDM4IDEwLjI4OTA2MiAyNi4xNDQ1MzEgOS4wNTA3ODEgMjYuMTQ0NTMxIFogTSA5LjA1MDc4MSAyNi4xNDQ1MzEgIi8+DQo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gMi4yNjE3MTkgMjYuMTQ0NTMxIEMgMS4wMDM5MDYgMjYuMTQ0NTMxIDAgMjcuMTQ4NDM4IDAgMjguNDA2MjUgTCAwIDQ2LjQ4ODI4MSBDIDAgNDcuNzQ2MDk0IDEuMDAzOTA2IDQ4Ljc0NjA5NCAyLjI2MTcxOSA0OC43NDYwOTQgQyAzLjUwMzkwNiA0OC43NDYwOTQgNC41MjM0MzggNDcuNzQ2MDk0IDQuNTIzNDM4IDQ2LjQ4ODI4MSBMIDQuNTIzNDM4IDI4LjQwNjI1IEMgNC41MjM0MzggMjcuMTQ4NDM4IDMuNTAzOTA2IDI2LjE0NDUzMSAyLjI2MTcxOSAyNi4xNDQ1MzEgWiBNIDIuMjYxNzE5IDI2LjE0NDUzMSAiLz4NCjwvZz4NCjwvc3ZnPg0K" : "/solution/dist-site/cursors/right-arrow-verybig.svg",
  //   bottom: __BUILD_TARGET__ === "extension" ? "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9Ijc1cHQiIGhlaWdodD0iNzVwdCIgdmlld0JveD0iMCAwIDc1IDc1IiB2ZXJzaW9uPSIxLjEiPg0KPGcgaWQ9InN1cmZhY2UxIj4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSAzOC41MzEyNSA3My41NzAzMTIgQyAzOC41ODk4NDQgNzMuNTM5MDYyIDM4LjYyNSA3My40ODQzNzUgMzguNjYwMTU2IDczLjQ0NTMxMiBMIDU5Ljg1MTU2MiA1Mi41OTM3NSBDIDYwLjU0Mjk2OSA1MS44NzUgNjAuNzYxNzE5IDUwLjgyNDIxOSA2MC40MTQwNjIgNDkuOTAyMzQ0IEMgNjAuMDc0MjE5IDQ4Ljk5MjE4OCA1OS4yNTc4MTIgNDguMzQ3NjU2IDU4LjI5Njg3NSA0OC4yMTQ4NDQgTCA0OC4xOTkyMTkgNDguMjE0ODQ0IEwgNDguMTk5MjE5IDIyLjMxNjQwNiBDIDQ4LjE5OTIxOSAyMS4xNDA2MjUgNDcuMjM4MjgxIDIwLjE3OTY4OCA0Ni4wNjI1IDIwLjE3OTY4OCBDIDQ2LjAyNzM0NCAyMC4xNzk2ODggNDUuOTkyMTg4IDIwLjE3OTY4OCA0NS45NTMxMjUgMjAuMTc5Njg4IEwgMjguMDE5NTMxIDIwLjE3OTY4OCBDIDI2LjgzOTg0NCAyMC4xMjUgMjUuODQ3NjU2IDIxLjAyNzM0NCAyNS43NzM0MzggMjIuMTgzNTk0IEMgMjUuNzczNDM4IDIyLjI0MjE4OCAyNS43NzM0MzggMjIuMjgxMjUgMjUuNzczNDM4IDIyLjMxNjQwNiBMIDI1Ljc3MzQzOCA0OC4yMTQ4NDQgTCAxNS42NzE4NzUgNDguMjE0ODQ0IEMgMTQuNzE4NzUgNDguMzQ3NjU2IDEzLjkwMjM0NCA0OC45OTIxODggMTMuNTU4NTk0IDQ5LjkwMjM0NCBMIDEzLjU1ODU5NCA1MC45MTc5NjkgQyAxMy41NTg1OTQgNTEuNTMxMjUgMTMuNzkyOTY5IDUyLjEyNSAxNC4yMjI2NTYgNTIuNTkzNzUgTCAzNS41MzEyNSA3My40NDUzMTIgQyAzNi4zMjQyMTkgNzQuMzE2NDA2IDM3LjY2NDA2MiA3NC4zNzUgMzguNTMxMjUgNzMuNTcwMzEyIFogTSAyMS4xNzU3ODEgNTIuNzA3MDMxIEwgMjguMDE5NTMxIDUyLjcwNzAzMSBDIDI5LjI1IDUyLjcwNzAzMSAzMC4yNjU2MjUgNTIuMjUzOTA2IDMwLjI2NTYyNSA1MS4wMTk1MzEgTCAzMC4yNjU2MjUgMjQuNjY0MDYyIEwgNDMuNzEwOTM4IDI0LjY2NDA2MiBMIDQzLjcxMDkzOCA1MS4wMTk1MzEgQyA0My43MTA5MzggNTIuMjUzOTA2IDQ0LjcyNjU2MiA1Mi43MDcwMzEgNDUuOTUzMTI1IDUyLjcwNzAzMSBMIDUyLjgwMDc4MSA1Mi43MDcwMzEgTCAzNyA2OC4xNzk2ODggWiBNIDIxLjE3NTc4MSA1Mi43MDcwMzEgIi8+DQo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gNDguMTk5MjE5IDE1LjY4NzUgQyA0OC4xOTkyMTkgMTQuNDY0ODQ0IDQ3LjIwMzEyNSAxMy40NDkyMTkgNDUuOTUzMTI1IDEzLjQ0OTIxOSBMIDI4LjAxOTUzMSAxMy40NDkyMTkgQyAyNi43Njk1MzEgMTMuNDQ5MjE5IDI1Ljc3MzQzOCAxNC40NjQ4NDQgMjUuNzczNDM4IDE1LjY4NzUgQyAyNS43NzM0MzggMTYuOTQxNDA2IDI2Ljc2OTUzMSAxNy45Mzc1IDI4LjAxOTUzMSAxNy45Mzc1IEwgNDUuOTUzMTI1IDE3LjkzNzUgQyA0Ny4yMDMxMjUgMTcuOTM3NSA0OC4xOTkyMTkgMTYuOTQxNDA2IDQ4LjE5OTIxOSAxNS42ODc1IFogTSA0OC4xOTkyMTkgMTUuNjg3NSAiLz4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSA0OC4xOTkyMTkgOC45NzY1NjIgQyA0OC4xOTkyMTkgNy43MjY1NjIgNDcuMjAzMTI1IDYuNzMwNDY5IDQ1Ljk1MzEyNSA2LjczMDQ2OSBMIDI4LjAxOTUzMSA2LjczNDM3NSBDIDI2Ljc2OTUzMSA2LjczNDM3NSAyNS43NzM0MzggNy43MjY1NjIgMjUuNzczNDM4IDguOTc2NTYyIEMgMjUuNzczNDM4IDEwLjIxNDg0NCAyNi43Njk1MzEgMTEuMjI2NTYyIDI4LjAxOTUzMSAxMS4yMjY1NjIgTCA0NS45NTMxMjUgMTEuMjE4NzUgQyA0Ny4yMDMxMjUgMTEuMjE4NzUgNDguMTk5MjE5IDEwLjIxNDg0NCA0OC4xOTkyMTkgOC45NzY1NjIgWiBNIDQ4LjE5OTIxOSA4Ljk3NjU2MiAiLz4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSA0OC4xOTkyMTkgMi4yNSBDIDQ4LjE5OTIxOSAwLjk5NjA5NCA0Ny4yMDMxMjUgMCA0NS45NTMxMjUgMCBMIDI4LjAxOTUzMSAwIEMgMjYuNzY5NTMxIDAgMjUuNzczNDM4IDAuOTk2MDk0IDI1Ljc3MzQzOCAyLjI1IEMgMjUuNzczNDM4IDMuNDgwNDY5IDI2Ljc2OTUzMSA0LjQ4ODI4MSAyOC4wMTk1MzEgNC40ODgyODEgTCA0NS45NTMxMjUgNC40ODgyODEgQyA0Ny4yMDMxMjUgNC40ODgyODEgNDguMTk5MjE5IDMuNDgwNDY5IDQ4LjE5OTIxOSAyLjI1IFogTSA0OC4xOTkyMTkgMi4yNSAiLz4NCjwvZz4NCjwvc3ZnPg0K" : "/solution/dist-site/cursors/bottom-arrow-verybig.svg",
  //   left: __BUILD_TARGET__ === "extension" ? "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjgwcHQiIGhlaWdodD0iODBwdCIgdmlld0JveD0iMCAwIDgwIDgwIiB2ZXJzaW9uPSIxLjEiPg0KPGcgaWQ9InN1cmZhY2UxIj4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSAwLjYwMTU2MiA0MS4xMDE1NjIgQyAwLjYzNjcxOSA0MS4xNjQwNjIgMC42OTE0MDYgNDEuMTk5MjE5IDAuNzM4MjgxIDQxLjIzODI4MSBMIDIyLjk3NjU2MiA2My44Mzk4NDQgQyAyMy43NSA2NC41NzgxMjUgMjQuODY3MTg4IDY0LjgxMjUgMjUuODUxNTYyIDY0LjQ0MTQwNiBDIDI2LjgyMDMxMiA2NC4wNzgxMjUgMjcuNTA3ODEyIDYzLjIwNzAzMSAyNy42NDg0MzggNjIuMTgzNTk0IEwgMjcuNjQ4NDM4IDUxLjQxNDA2MiBMIDU1LjI3MzQzOCA1MS40MTQwNjIgQyA1Ni41MjczNDQgNTEuNDE0MDYyIDU3LjU1NDY4OCA1MC4zODY3MTkgNTcuNTU0Njg4IDQ5LjEzMjgxMiBDIDU3LjU1NDY4OCA0OS4wOTc2NTYgNTcuNTU0Njg4IDQ5LjA1ODU5NCA1Ny41NTQ2ODggNDkuMDE1NjI1IEwgNTcuNTU0Njg4IDI5Ljg4NjcxOSBDIDU3LjYwOTM3NSAyOC42Mjg5MDYgNTYuNjQ4NDM4IDI3LjU3MDMxMiA1NS40MTAxNTYgMjcuNDkyMTg4IEMgNTUuMzQ3NjU2IDI3LjQ5MjE4OCA1NS4zMDg1OTQgMjcuNDkyMTg4IDU1LjI3MzQzOCAyNy40OTIxODggTCAyNy42NDg0MzggMjcuNDkyMTg4IEwgMjcuNjQ4NDM4IDE2LjcxODc1IEMgMjcuNTA3ODEyIDE1LjY5OTIxOSAyNi44MjAzMTIgMTQuODI4MTI1IDI1Ljg1MTU2MiAxNC40NjA5MzggTCAyNC43Njk1MzEgMTQuNDYwOTM4IEMgMjQuMTEzMjgxIDE0LjQ2MDkzOCAyMy40NzY1NjIgMTQuNzEwOTM4IDIyLjk3NjU2MiAxNS4xNzE4NzUgTCAwLjczODI4MSAzNy44OTg0MzggQyAtMC4xOTUzMTIgMzguNzQ2MDk0IC0wLjI1MzkwNiA0MC4xNzU3ODEgMC42MDE1NjIgNDEuMTAxNTYyIFogTSAyMi44NTU0NjkgMjIuNTg1OTM4IEwgMjIuODU1NDY5IDI5Ljg4NjcxOSBDIDIyLjg1NTQ2OSAzMS4xOTkyMTkgMjMuMzM5ODQ0IDMyLjI4MTI1IDI0LjY1NjI1IDMyLjI4MTI1IEwgNTIuNzY1NjI1IDMyLjI4MTI1IEwgNTIuNzY1NjI1IDQ2LjYyNSBMIDI0LjY1NjI1IDQ2LjYyNSBDIDIzLjMzOTg0NCA0Ni42MjUgMjIuODU1NDY5IDQ3LjcwNzAzMSAyMi44NTU0NjkgNDkuMDE1NjI1IEwgMjIuODU1NDY5IDU2LjMyMDMxMiBMIDYuMzUxNTYyIDM5LjQ2NDg0NCBaIE0gMjIuODU1NDY5IDIyLjU4NTkzOCAiLz4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSA2Mi4zMzk4NDQgNTEuNDE0MDYyIEMgNjMuNjUyMzQ0IDUxLjQxNDA2MiA2NC43MzQzNzUgNTAuMzUxNTYyIDY0LjczNDM3NSA0OS4wMTU2MjUgTCA2NC43MzQzNzUgMjkuODg2NzE5IEMgNjQuNzM0Mzc1IDI4LjU1NDY4OCA2My42NTIzNDQgMjcuNDkyMTg4IDYyLjMzOTg0NCAyNy40OTIxODggQyA2MS4wMDc4MTIgMjcuNDkyMTg4IDU5Ljk0NTMxMiAyOC41NTQ2ODggNTkuOTQ1MzEyIDI5Ljg4NjcxOSBMIDU5Ljk0NTMxMiA0OS4wMTU2MjUgQyA1OS45NDUzMTIgNTAuMzUxNTYyIDYxLjAwNzgxMiA1MS40MTQwNjIgNjIuMzM5ODQ0IDUxLjQxNDA2MiBaIE0gNjIuMzM5ODQ0IDUxLjQxNDA2MiAiLz4NCjxwYXRoIHN0eWxlPSIgc3Ryb2tlOm5vbmU7ZmlsbC1ydWxlOm5vbnplcm87ZmlsbDpyZ2IoMCUsMCUsMCUpO2ZpbGwtb3BhY2l0eToxOyIgZD0iTSA2OS41MDM5MDYgNTEuNDE0MDYyIEMgNzAuODM1OTM4IDUxLjQxNDA2MiA3MS44OTg0MzggNTAuMzUxNTYyIDcxLjg5ODQzOCA0OS4wMTU2MjUgTCA3MS44OTg0MzggMjkuODg2NzE5IEMgNzEuODk4NDM4IDI4LjU1NDY4OCA3MC44MzU5MzggMjcuNDkyMTg4IDY5LjUwMzkwNiAyNy40OTIxODggQyA2OC4xODc1IDI3LjQ5MjE4OCA2Ny4xMDU0NjkgMjguNTU0Njg4IDY3LjEwNTQ2OSAyOS44ODY3MTkgTCA2Ny4xMDU0NjkgNDkuMDE1NjI1IEMgNjcuMTA1NDY5IDUwLjM1MTU2MiA2OC4xOTUzMTIgNTEuNDE0MDYyIDY5LjUwMzkwNiA1MS40MTQwNjIgWiBNIDY5LjUwMzkwNiA1MS40MTQwNjIgIi8+DQo8cGF0aCBzdHlsZT0iIHN0cm9rZTpub25lO2ZpbGwtcnVsZTpub256ZXJvO2ZpbGw6cmdiKDAlLDAlLDAlKTtmaWxsLW9wYWNpdHk6MTsiIGQ9Ik0gNzYuNjc5Njg4IDUxLjQxNDA2MiBDIDc4LjAxNTYyNSA1MS40MTQwNjIgNzkuMDc4MTI1IDUwLjM1MTU2MiA3OS4wNzgxMjUgNDkuMDE1NjI1IEwgNzkuMDc4MTI1IDI5Ljg4NjcxOSBDIDc5LjA3ODEyNSAyOC41NTQ2ODggNzguMDE1NjI1IDI3LjQ5MjE4OCA3Ni42Nzk2ODggMjcuNDkyMTg4IEMgNzUuMzcxMDk0IDI3LjQ5MjE4OCA3NC4yODkwNjIgMjguNTU0Njg4IDc0LjI4OTA2MiAyOS44ODY3MTkgTCA3NC4yODkwNjIgNDkuMDE1NjI1IEMgNzQuMjg5MDYyIDUwLjM1MTU2MiA3NS4zNzEwOTQgNTEuNDE0MDYyIDc2LjY3OTY4OCA1MS40MTQwNjIgWiBNIDc2LjY3OTY4OCA1MS40MTQwNjIgIi8+DQo8L2c+DQo8L3N2Zz4NCg==" : "/solution/dist-site/cursors/left-arrow-verybig.svg",
  // }
  private _borders: Record<BorderSide, HTMLElement>;
  private _bordersContainer: HTMLElement;
  private _interval: number | undefined = undefined;

  constructor() {
    super();
    const topBorder: HTMLElement = document.createElement("div");
    const rightBorder: HTMLElement = document.createElement("div");
    const bottomBorder: HTMLElement = document.createElement("div");
    const leftBorder: HTMLElement = document.createElement("div");
    topBorder.classList.add("lisio-band", "top", "verybig");
    rightBorder.classList.add("lisio-band", "right", "verybig");
    bottomBorder.classList.add("lisio-band", "bottom", "verybig");
    leftBorder.classList.add("lisio-band", "left", "verybig");
    const arrowSvg = `<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" viewBox="0 0 32 32" fill="none"><path d="M13.8271 30C13.8271 31.1046 14.7999 32 15.9999 32C17.1998 32 18.1726 31.1046 18.1726 30H13.8271ZM17.5365 0.585798C16.688 -0.195257 15.3123 -0.195267 14.4638 0.585774L0.636396 13.3136C-0.212122 14.0946 -0.212133 15.361 0.63637 16.142C1.48488 16.9231 2.86057 16.9231 3.7091 16.142L16.0001 4.82842L28.2909 16.1422C29.1393 16.9233 30.5151 16.9233 31.3636 16.1423C32.212 15.3612 32.2123 14.0949 31.3636 13.3138L17.5365 0.585798ZM18.1726 30L18.1729 2.00002L13.8274 1.99998L13.8271 30H18.1726Z" fill="white"></path></svg>`;
    topBorder.innerHTML = arrowSvg;
    rightBorder.innerHTML = arrowSvg;
    bottomBorder.innerHTML = arrowSvg;
    leftBorder.innerHTML = arrowSvg;
    this._bordersContainer = document.createElement("div");
    const firstContainer = document.createElement("div");
    const secondContainer = document.createElement("div");
    firstContainer.appendChild(topBorder);
    secondContainer.appendChild(leftBorder);
    secondContainer.appendChild(bottomBorder);
    secondContainer.appendChild(rightBorder);
    this._bordersContainer.appendChild(firstContainer);
    this._bordersContainer.appendChild(secondContainer);
    this._bordersContainer.classList.add("borders-container");

    this._borders = {
      top: topBorder,
      right: rightBorder,
      bottom: bottomBorder,
      left: leftBorder,
    };
  }

  /**
   * Public method implementing abstract method adapt of Adapter
   * @param {LisioTextTreeWalker} walker - A walker to explore the DOM
   * @param {number} value - Value of the functionality
   * @returns Returns nothing
   * @source
   */
  public adapt(_: LisioTextTreeWalker, value: number): void {
    this.adaptFunction(document.body, value);
    if (value !== 1) {
      LisioShadowRootController.current.appendElement(
        this._bordersContainer,
        styles,
      );
      LisioShadowRootController.current.addStyles(`
        section#lisio-list-section {
          height: calc(88vh - 140px - 40px);
        }
        #lisio-list-div:not(.lisio-closed) {
          padding-bottom: calc(6vh + 140px) !important;
        }
        @supports (height: 1dvh) {
          section#lisio-list-section {
            height: calc(88dvh - 140px - 40px);
          }
          #lisio-list-div:not(.lisio-closed) {
            padding-bottom: calc(6dvh + 140px) !important;
          }
        }
      `);

      const sides: BorderSide[] = ["top", "right", "bottom", "left"];

      for (const side of sides) {
        this._borders[side].addEventListener("mouseenter", (e) => {
          this.evtMouseEnter(e);
        });
        this._borders[side].addEventListener("mouseleave", () => {
          this.evtMouseLeave();
        });
      }
    } else {
      window.scrollTo({ left: 0, behavior: "smooth" });
      LisioShadowRootController.current.removeElement(
        this._bordersContainer,
        styles,
      );
      LisioShadowRootController.current.removeStyles(`
        section#lisio-list-section {
          height: calc(88vh - 140px - 40px);
        }
        #lisio-list-div:not(.lisio-closed) {
          padding-bottom: calc(6vh + 140px) !important;
        }
        @supports (height: 1dvh) {
          section#lisio-list-section {
            height: calc(88dvh - 140px - 40px);
          }
          #lisio-list-div:not(.lisio-closed) {
            padding-bottom: calc(6dvh + 140px) !important;
          }
        }
      `);
    }
  }

  protected adaptFunction(element: HTMLElement, value: number): void {
    LisioStyleSheetController.current.removeRule("#lisio-shadow-env");
    LisioStyleSheetController.current.insertOrReplaceRule(
      new Map([[LisioCSSProperties.ZOOM, (1 / value).toString()]]),
      "#lisio-shadow-env",
    );
    LisioStyleSheetController.current.removeRule(".lisio-zoom");

    const scrollEl = document.documentElement;
    const applyScrollDetection = () => {
      const hasScroll = scrollEl.scrollWidth > scrollEl.clientWidth;
      (["left", "right"] as const).forEach((side) => {
        this._borders[side].classList[hasScroll ? "remove" : "add"](
          "lisio-hidden",
        );
      });
    };

    const observer = new ResizeObserver(() => {
      observer.disconnect();
      applyScrollDetection();
    });

    observer.observe(scrollEl);

    if (value === 1) {
      element.classList.remove("lisio-zoom");
      observer.disconnect();
    } else {
      LisioStyleSheetController.current.replaceImportantInStyleAttribute(
        [LisioCSSProperties.ZOOM],
        element,
      );
      element.classList.add(`lisio-zoom`);
      LisioStyleSheetController.current.insertRule(
        ".lisio-zoom",
        new Map([[LisioCSSProperties.ZOOM, value.toString()]]),
      );
    }
  }

  private evtMouseEnter(e: MouseEvent) {
    let y = 0;
    let x = 0;
    clearInterval(this._interval);
    if (e.target) {
      if ((e.target as HTMLElement).classList.contains("bottom")) {
        y = 50;
      } else if ((e.target as HTMLElement).classList.contains("top")) {
        y = -50;
      } else if ((e.target as HTMLElement).classList.contains("right")) {
        x = 50;
      } else if ((e.target as HTMLElement).classList.contains("left")) {
        x = -50;
      }
      this._interval = setInterval(() => {
        window.scrollBy({
          left: x,
          top: y,
          behavior: "smooth",
        });
      }, 100);
    }
  }

  private evtMouseLeave() {
    clearInterval(this._interval);
  }
}

type BorderSide = "top" | "right" | "bottom" | "left";

export default LisioZoomAdapter;
