// Theme application function - will be stringified and injected. So, it must not use anything from the closure
export const applyTheme = function () {
  try {
    // This utility is a replica of @calcom/lib/webstorage.ts but we can reuse it because applyTheme is stringified and injected, so we can't have deps here
    const safeLocalStorage = {
      getItem: function (key: string) {
        try {
          // eslint-disable-next-line @calcom/eslint/avoid-web-storage
          return localStorage.getItem(key);
        } catch (e) {
          return null;
        }
      },
      key: function (index: number) {
        try {
          // eslint-disable-next-line @calcom/eslint/avoid-web-storage
          return localStorage.key(index);
        } catch (e) {
          return null;
        }
      },
      getLength: function () {
        try {
          // eslint-disable-next-line @calcom/eslint/avoid-web-storage
          return localStorage.length;
        } catch (e) {
          return 0;
        }
      },
    };

    const appTheme = safeLocalStorage.getItem("app-theme");
    if (!appTheme) return;

    let bookingTheme: string | null = null;
    let username: string | undefined;
    for (let i = 0; i < safeLocalStorage.getLength(); i++) {
      const key = safeLocalStorage.key(i);
      if (key && key.startsWith("booking-theme:")) {
        bookingTheme = safeLocalStorage.getItem(key);
        username = key.split("booking-theme:")[1];
        break;
      }
    }

    const onReady = () => {
      const isBookingPage = username && window.location.pathname.slice(1).startsWith(username);
      if (document.body) {
        document.body.classList.add(isBookingPage ? bookingTheme || appTheme : appTheme);
      } else {
        requestAnimationFrame(onReady);
      }
    };

    requestAnimationFrame(onReady);
  } catch (e) {
    console.error("Error applying theme:", e);
  }
};

// ToDesktop class application function - will be stringified and injected. So, it must not use anything from the closure
export const applyToDesktopClass = function () {
  try {
    const onReady = () => {
      if (typeof window !== "undefined" && window.calIsDesktopApp && document.documentElement) {
        document.documentElement.classList.add("todesktop");
      } else if (document.documentElement) {
        return;
      } else {
        requestAnimationFrame(onReady);
      }
    };

    requestAnimationFrame(onReady);
  } catch (e) {
    console.error("Error applying todesktop class:", e);
  }
};
