(function () {
  var currentScript =
    document.currentScript ||
    (function () {
      var scripts = document.getElementsByTagName("script");
      return scripts[scripts.length - 1];
    })();
  // Version 2.0.11
  var assistantId = currentScript.getAttribute("data-assistant-id") || "";
  var userId = currentScript.getAttribute("data-user-id");
  var origin = currentScript.getAttribute("data-origin");
  var type = currentScript.getAttribute("data-type");

  var iframe = document.createElement("iframe");

  // Default widget position
  var currentPosition = "Right";

  // Mobile detection
  var isMobile = window.innerWidth < 768;

  // Store original body overflow value for restoration
  var originalBodyOverflow = document.body.style.overflow || "";

  // Store original viewport meta tag for restoration
  var originalViewportContent = "";
  var viewportMetaTag = null;

  // Initialize viewport meta tag management
  function initializeViewportControl() {
    viewportMetaTag = document.querySelector('meta[name="viewport"]');
    if (viewportMetaTag) {
      originalViewportContent = viewportMetaTag.getAttribute("content") || "";
    } else {
      // Create viewport meta tag
      viewportMetaTag = document.createElement("meta");
      viewportMetaTag.name = "viewport";
      viewportMetaTag.content = "width=device-width, initial-scale=1.0";
      document.head.appendChild(viewportMetaTag);
      originalViewportContent = viewportMetaTag.content;
    }
    console.log(
      "Viewport control initialized with original content:",
      originalViewportContent
    );
  }

  // Update viewport scale settings based on widget state
  function updateViewportScale(isMinimized, isMobileMode) {
    if (!viewportMetaTag) return;

    if (isMobileMode && !isMinimized) {
      // Mobile widget expanded: disable scaling
      viewportMetaTag.setAttribute(
        "content",
        "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
      );
      console.log("Viewport scaling disabled for mobile widget expansion");
    } else {
      // Mobile widget minimized or desktop mode
      viewportMetaTag.setAttribute("content", originalViewportContent);
      console.log("Viewport scaling restored to original settings");
    }
  }

  // Initialize viewport control
  initializeViewportControl();

  // Current widget settings
  var currentSettings = {
    width: 370,
    height: 650,
    isMobile: isMobile,
  };

  // Current widget state
  var currentWidgetState = {
    isMinimized: false,
    isSmallWidth: false,
  };

  function updateIframePosition(position) {
    // Validate position parameter
    if (position !== "Left" && position !== "Right") {
      position = "Right";
    }

    // Reset both position styles first
    iframe.style.left = "";
    iframe.style.right = "";

    // Set the appropriate position
    if (position === "Left") {
      iframe.style.left = "0";
    } else {
      iframe.style.right = "0";
    }

    currentPosition = position;
    console.log("Widget position updated to:", position);
  }

  // Handle mobile state update - centralized logic for size updates
  function handleSizeUpdate() {
    const wasMobile = isMobile;
    isMobile = window.innerWidth < 768;

    // Update currentSettings
    currentSettings.isMobile = isMobile;

    // Apply responsive updates
    updateIframeResponsive();

    // Update body overflow state when mobile state changes
    updateBodyOverflow(
      currentWidgetState.isMinimized,
      currentSettings.isMobile
    );

    console.log("Size update completed - Mobile state:", isMobile);
  }

  // Apply responsive layout updates based on mobile/desktop state
  function updateIframeResponsive() {
    // Mobile layout: update widget visibility with current state
    updateWidgetVisibility(
      currentWidgetState.isMinimized,
      currentWidgetState.isSmallWidth
    );

    if (isMobile) {
      // Apply mobile-specific positioning
      iframe.style.bottom = "0";
    } else {
      // Desktop layout: fixed dimensions and positioning
      // iframe.style.width = "420px";
      // iframe.style.height = "650px";
      // iframe.style.bottom = "0";

      // Restore position based on current setting
      updateIframePosition(currentPosition);
    }

    // Notify iframe of size changes with current dimensions
    iframe.contentWindow.postMessage(
      {
        type: "IFRAME_SIZE_UPDATE",
        width: isMobile ? window.innerWidth : 352,
        height: isMobile ? window.innerHeight : 600,
        isMobile: isMobile,
        siteUrl: window.location.href,
      },
      "*"
    );
    console.log("Iframe responsive update completed");
  }

  // iOS-specific styles and attributes
  // iframe.style.position = "fixed";
  iframe.style.bottom = "0";
  iframe.style.position = "fixed";
  // Set default position
  updateIframePosition(currentPosition);
  iframe.style.zIndex = "2147483647";
  iframe.style.webkitOverflowScrolling = "touch"; // Enable smooth scrolling on iOS

  // Extended permissions for iOS
  iframe.allow = "microphone; camera; autoplay; fullscreen; display-capture";
  iframe.setAttribute("playsinline", ""); // Ensures proper video behavior on iOS

  iframe.src =
    type === "chatbot"
      ? `${origin}/?type=${type}&preview=false&assistantId=${assistantId}&userId=${userId}&platform=ios&t=${Date.now()}`
      : `${origin}/?type=${type}&preview=false&userId=${userId}&platform=ios&t=${Date.now()}`;

  iframe.frameBorder = "0";
  // Detect iOS
  var isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;

  iframe.onload = function () {
    // Apply responsive layout after iframe loads
    updateIframeResponsive();

    // Set initial viewport scale state
    updateViewportScale(
      currentWidgetState.isMinimized,
      currentSettings.isMobile
    );
  };

  document.body.appendChild(iframe);

  // Handle window resize with centralized size update logic
  window.addEventListener("resize", handleSizeUpdate);

  // // Apply initial responsive layout with delay
  if (isMobile) {
    setTimeout(updateIframeResponsive, 500);
    setTimeout(updateIframeResponsive, 1500);
    setTimeout(updateIframeResponsive, 2500);
  }
  // setTimeout(updateIframeResponsive, 500);
  // setTimeout(updateIframeResponsive, 1500);
  // setTimeout(updateIframeResponsive, 2500);

  window.addEventListener(
    "message",
    function (event) {
      if (event.origin === origin) {
        // Handle size update request from iframe
        if (event.data && event.data.type === "REQUEST_SIZE_UPDATE") {
          console.log("Received size update request");
          handleSizeUpdate();
        }

        // Handle site URL
        if (event.data && event.data.type === "REQUEST_SITE_URL") {
          console.log(
            "Received site URL request, timestamp:",
            event.data.timestamp
          );
          iframe.contentWindow.postMessage(
            {
              type: "SITE_URL_RESPONSE",
              siteUrl: window.location.href,
              timestamp: Date.now(),
            },
            origin
          );
        }

        // Handle widget position updates
        if (event.data && typeof event.data.widgetPosition !== "undefined") {
          var widgetPosition = event.data.widgetPosition;
          console.log("Widget position received:", widgetPosition);
          updateIframePosition(widgetPosition);
        }

        if (event.data && event.data.siteUrl) {
          var siteUrl = event.data.siteUrl;
          console.log("Received site URL:", siteUrl);
        }

        // Handle navigation message
        if (event.data && event.data.type === "navigate" && event.data.url) {
          console.log("Received navigation request:", event.data.url);
          // Basic URL validation for security
          if (typeof event.data.url === "string" && event.data.url.length > 0) {
            window.location.href = event.data.url;
          }
        }

        // Handle widget state change message
        if (event.data && event.data.type === "WIDGET_STATE_CHANGE") {
          console.log(
            "Widget state changed:",
            event.data.isMinimized ? "minimized" : "maximized"
          );
          // Update current widget state
          currentWidgetState.isMinimized = event.data.isMinimized;
          currentWidgetState.isSmallWidth = event.data.isSmallWidth;

          // Update widget visibility
          updateWidgetVisibility(
            event.data.isMinimized,
            event.data.isSmallWidth
          );

          // Update body overflow state for mobile scroll prevention
          updateBodyOverflow(event.data.isMinimized, currentSettings.isMobile);
        }

        // Handle cart add message
        if (
          event.data &&
          event.data.action === "addToCart" &&
          event.data.formData
        ) {
          console.log("Received add to cart data:", event.data.formData);

          // Call Shopify API to add item to cart
          fetch(window.Shopify.routes.root + "cart/add.js", {
            method: "POST",
            headers: {
              "Content-Type": "application/json",
            },
            body: JSON.stringify(event.data.formData),
          })
            .then(function (response) {
              return response.json();
            })
            .then(function (data) {
              console.log("Item added to cart:", data);
              // Send success message back to iframe
              if (data && data.items) {
                const cart =
                  document.querySelector("cart-notification") ||
                  document.querySelector("cart-drawer");

                // Update cart-icon-bubble
                if (data.sections && data.sections["cart-icon-bubble"]) {
                  const cartBubble =
                    document.getElementById("cart-icon-bubble");
                  if (cartBubble) {
                    cartBubble.innerHTML = data.sections["cart-icon-bubble"];
                  }
                }
                iframe.contentWindow.postMessage(
                  {
                    action: "addToCartSuccess",
                    product: data,
                  },
                  origin
                );
              } else {
                // Send error message back to iframe
                iframe.contentWindow.postMessage(
                  {
                    action: "addToCartError",
                    error: error.message,
                  },
                  origin
                );
              }
            })
            .catch(function (error) {
              console.error("Error adding to cart:", error);
              // Send error message back to iframe
              iframe.contentWindow.postMessage(
                {
                  action: "addToCartError",
                  error: error.message,
                },
                origin
              );
            });
        }
      }
    },
    false
  );

  // Update widget visibility based on minimized state and screen width
  function updateWidgetVisibility(isMinimized, isSmallWidth) {
    if (isMinimized) {
      console.log("Widget minimized - Small width mode:", isSmallWidth);
      if (isSmallWidth) {
        // Minimized compact mode: tiny floating button
        iframe.style.width = "60px";
        iframe.style.height = "60px";
        iframe.style.overflow = "hidden";
      } else {
        // Minimized normal mode: small floating bar
        iframe.style.width = "300px";
        iframe.style.height = "80px";
        iframe.style.overflow = "hidden";
      }
    } else {
      // Maximized mode: full widget dimensions
      if (currentSettings.isMobile) {
        // Mobile: full screen
        iframe.style.width = "100vw";
        iframe.style.height = "100vh";
      } else {
        // Desktop: fixed dimensions
        iframe.style.width = currentSettings.width + "px";
        iframe.style.height = currentSettings.height + "px";
      }
      iframe.style.borderRadius = currentSettings.isMobile ? "0" : "15px";
      iframe.style.overflow = "visible";
    }
  }

  // Manage body overflow state based on widget state and mobile detection
  function updateBodyOverflow(isMinimized, isMobileMode) {
    if (isMobileMode && !isMinimized) {
      // Mobile widget expanded
      document.body.style.overflow = "hidden";
      console.log("Body scroll disabled for mobile widget expansion");
    } else {
      // Mobile widget minimized or desktop mode
      document.body.style.overflow = originalBodyOverflow;
      console.log("Body scroll restored to original state");
    }

    // Update viewport scaling along with body overflow
    updateViewportScale(isMinimized, isMobileMode);
  }
})();
