// v5.8.53 — CHỐT CHẶN MÀN CHỜ + LƯỚI AN TOÀN CHO LOGO, đặt ở TỆP NGOÀI chứ không nội tuyến.
//
// Vì sao: bản trước để hai thứ này nội tuyến trong index.html (thẻ <script> và thuộc tính onerror).
// Chạy trên web thì được, nhưng trong TRANG CỦA EXTENSION, CSP `script-src 'self'` CẤM mọi mã nội
// tuyến — Chrome ghi rõ "The action has been blocked" (thấy trong log người dùng gửi 01/08).
// Nghĩa là đúng ở nơi cần nhất — overlay trong tab TikTok — cả hai lưới an toàn đều CHẾT.
// Tệp ngoài không bị CSP chặn nên đặt ở đây là chạy được ở cả hai nơi.
(function () {
  // Dù app.js hỏng hay nạp lỗi, sau 12 giây màn chờ cũng phải biến mất — tuyệt đối không để
  // người dùng ngồi trước một màn chờ vĩnh viễn.
  setTimeout(function () { document.getElementById("bootSplash")?.remove(); }, 12000);
  // Logo hỏng/thiếu tệp thì gỡ đi, không để trơ khung ảnh vỡ.
  document.addEventListener("error", function (ev) {
    const el = ev.target;
    if (el && el.classList && el.classList.contains("auth-right-logo")) el.remove();
  }, true); // pha capture: sự kiện error của <img> KHÔNG nổi bọt nên phải bắt ở đây
})();

/**
 * DisplayModeManager - Hybrid Adaptive Desktop UI Manager
 * Giám sát viewport và chỉ điều chỉnh density/layout cho STONK AI BOOKING.
 * Trạng thái sidebar thuộc quyền điều khiển của applyDisplayMode() theo lựa chọn user.
 */
class DisplayModeManager {
  constructor() {
    this.currentModeKey = "";
    this.resizeFrame = null;
    this.observer = null;
    this.active = false;
  }

  resolveDisplayMode(width, height) {
    if (width >= 1450) {
      return { density: "comfortable", layout: "desktop" };
    }
    if (width >= 1250) {
      return { density: "compact", layout: "desktop" };
    }
    if (width >= 960) {
      return { density: "ultra", layout: "desktop" };
    }
    if (width >= 760) {
      return { density: "ultra", layout: "narrow" };
    }
    return { density: "ultra", layout: "micro" };
  }

  applyDisplayMode() {
    const viewport = document.querySelector("#stonkAppViewport");
    const root = document.querySelector("#stonkAppRoot");
    if (!viewport || !root) return;

    const mode = this.resolveDisplayMode(viewport.clientWidth, viewport.clientHeight);
    const modeKey = [mode.density, mode.layout].join(":");
    if (modeKey === this.currentModeKey) return;

    this.currentModeKey = modeKey;
    root.dataset.density = mode.density;
    root.dataset.layout = mode.layout;

    root.style.zoom = "";
    root.style.width = "";
    root.style.minHeight = "";
    root.style.transform = "";
    root.style.transformOrigin = "";
  }

  start() {
    if (this.active) return;
    this.active = true;

    const viewport = document.querySelector("#stonkAppViewport");
    if (!viewport) return;

    this.applyDisplayMode();

    this.observer = new ResizeObserver(() => {
      if (this.resizeFrame) cancelAnimationFrame(this.resizeFrame);
      this.resizeFrame = requestAnimationFrame(() => this.applyDisplayMode());
    });

    // RÀNG BUỘC QUAN TRỌNG: Chỉ quan sát viewport, tuyệt đối KHÔNG quan sát root!
    this.observer.observe(viewport);
  }

  stop() {
    if (!this.active) return;
    this.active = false;

    if (this.observer) {
      this.observer.disconnect();
      this.observer = null;
    }
    if (this.resizeFrame) {
      cancelAnimationFrame(this.resizeFrame);
      this.resizeFrame = null;
    }

    const root = document.querySelector("#stonkAppRoot");
    if (root) {
      delete root.dataset.density;
      delete root.dataset.layout;
      root.style.zoom = "";
      root.style.width = "";
      root.style.minHeight = "";
    }
    this.currentModeKey = "";
  }
}

globalThis.DisplayModeManager = DisplayModeManager;

// Sidebar Collapse Controller
(function initSidebarCollapse() {
  const TOGGLE_SELECTOR = "#btnToggleMainSidebar, #btnToggleSidebarHeader, #btnToggleSidebarBottom, .sidebar-collapse-trigger";

  function syncSidebarToggleState(collapsed) {
    document.querySelectorAll(TOGGLE_SELECTOR).forEach((button) => {
      button.setAttribute("aria-expanded", collapsed ? "false" : "true");
      button.setAttribute("aria-label", collapsed ? "Mở rộng menu chính" : "Thu gọn menu chính");
      button.title = collapsed
        ? "Mở rộng menu chính (Ctrl+B)"
        : "Thu gọn menu chính (Ctrl+B)";
    });
  }

  function setSidebarCollapsed(collapsed) {
    const root = document.getElementById("stonkAppRoot");
    if (collapsed) {
      document.body.classList.add("sidebar-collapsed");
      if (root) root.classList.add("sidebar-collapsed");
      try { localStorage.setItem("stonk_sidebar_collapsed", "1"); } catch (e) {}
    } else {
      document.body.classList.remove("sidebar-collapsed");
      if (root) root.classList.remove("sidebar-collapsed");
      try { localStorage.setItem("stonk_sidebar_collapsed", "0"); } catch (e) {}
    }
    syncSidebarToggleState(collapsed);
  }

  function toggleSidebar() {
    const isCollapsed = document.body.classList.contains("sidebar-collapsed") ||
                        document.getElementById("stonkAppRoot")?.classList.contains("sidebar-collapsed");
    setSidebarCollapsed(!isCollapsed);
  }

  globalThis.toggleMainSidebar = toggleSidebar;

  // Restore saved state immediately
  try {
    setSidebarCollapsed(localStorage.getItem("stonk_sidebar_collapsed") === "1");
  } catch (e) {}

  // Keyboard shortcut: Ctrl + B or Cmd + B
  document.addEventListener("keydown", (e) => {
    if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === "b" && !e.target.matches("input, textarea, select")) {
      e.preventDefault();
      toggleSidebar();
    }
  });

  // Bind clicks on toggle buttons
  document.addEventListener("click", (e) => {
    if (e.target.closest(TOGGLE_SELECTOR)) {
      e.preventDefault();
      toggleSidebar();
    }
  });
})();
