/**
 * Fichier  : assets/js/scrolltop.js
 * Auteur   : KREMER Régis
 * Version  : 2.2.0
 * Date     : 2026-02-21
 * Description : JS — Bouton retour en haut de page
 *
 * Changelog :
 *   v2.1.0 (2026-02-21) — Version initiale auditée et sécurisée
 *   v2.1.1 (2026-02-21) — Corrections sécurité, utils.js centralisé
 *   v2.2.0 (2026-02-21) — Permissions magasins, bons de commande, rapport d'écart,
 *                      import CSV, historique prix, bon de livraison multi-lignes
 */
document.addEventListener("DOMContentLoaded", function () {
  const btn = document.getElementById("scrollTopProgress");
  if (!btn) return;

  // MageStock scrolle généralement dans .main-content (body overflow hidden)
  const scrollContainer =
    document.getElementById("appContent") ||
    document.querySelector(".main-content") ||
    window;

  const circle = btn.querySelector("circle.progress");
  if (!circle) return;

  // Lire le rayon depuis l'attribut r (fallback 24)
  const rAttr = parseFloat(circle.getAttribute("r") || "24");
  const radius = Number.isFinite(rAttr) ? rAttr : 24;
  const circumference = 2 * Math.PI * radius;

  circle.style.strokeDasharray = String(circumference);
  circle.style.strokeDashoffset = String(circumference);

  function metrics() {
    if (scrollContainer === window) {
      const doc = document.documentElement;
      const scrollTop = window.scrollY || doc.scrollTop || 0;
      const max = (doc.scrollHeight || 0) - window.innerHeight;
      return { scrollTop, max };
    }
    const el = scrollContainer;
    const scrollTop = el.scrollTop || 0;
    const max = (el.scrollHeight || 0) - (el.clientHeight || 0);
    return { scrollTop, max };
  }

  function scrollToTop() {
    if (scrollContainer === window) {
      window.scrollTo({ top: 0, behavior: "smooth" });
      return;
    }
    try {
      scrollContainer.scrollTo({ top: 0, behavior: "smooth" });
    } catch (e) {
      scrollContainer.scrollTop = 0;
    }
  }

  function update() {
    const { scrollTop, max } = metrics();
    const p = max > 0 ? Math.min(1, Math.max(0, scrollTop / max)) : 0;
    const offset = circumference - p * circumference;
    circle.style.strokeDashoffset = String(offset);

    // Premium: apparition un peu plus tôt si page longue
    const showAfter = max > 900 ? 160 : 220;
    if (scrollTop > showAfter) btn.classList.add("show");
    else btn.classList.remove("show");
  }

  // scroll listener passif (mobile-friendly)
  const opts = { passive: true };
  if (scrollContainer === window) window.addEventListener("scroll", update, opts);
  else scrollContainer.addEventListener("scroll", update, opts);

  window.addEventListener("resize", update, opts);

  btn.addEventListener("click", function () {
    scrollToTop();
  });

  update();
});
