/**
 * 期权到期倒计时(实例期权页 + 中控监控/看板共用)
 */
(function (global) {
  function normalizeExpMs(v) {
    if (v == null || v === "") return null;
    var n = Number(v);
    if (!Number.isFinite(n) || n <= 0) return null;
    if (n < 1e12) n *= 1000;
    return n;
  }

  function formatCountdown(expMs, nowMs) {
    var ms = normalizeExpMs(expMs);
    if (ms == null) return "—";
    var now = nowMs != null ? nowMs : Date.now();
    var rem = Math.max(0, Math.floor((ms - now) / 1000));
    if (rem <= 0) return "已到期";
    var d = Math.floor(rem / 86400);
    var h = Math.floor((rem % 86400) / 3600);
    var m = Math.floor((rem % 3600) / 60);
    var s = rem % 60;
    var pad = function (x) {
      return String(x).padStart(2, "0");
    };
    if (d > 0) return d + "天 " + pad(h) + ":" + pad(m) + ":" + pad(s);
    return pad(h) + ":" + pad(m) + ":" + pad(s);
  }

  function tick(root) {
    var scope = root && root.querySelectorAll ? root : document;
    var now = Date.now();
    scope.querySelectorAll("[data-opt-exp-ms]").forEach(function (el) {
      var exp = el.getAttribute("data-opt-exp-ms");
      var text = formatCountdown(exp, now);
      el.textContent = text;
      var expMs = normalizeExpMs(exp);
      el.classList.toggle("opt-expiry-cd--urgent", expMs != null && expMs - now > 0 && expMs - now < 3600000);
      el.classList.toggle("opt-expiry-cd--expired", text === "已到期");
    });
  }

  var timer = null;
  function ensureTimer() {
    tick();
    if (timer) return;
    timer = setInterval(function () {
      tick();
    }, 1000);
  }

  global.OptionsExpiryCountdown = {
    normalizeExpMs: normalizeExpMs,
    format: formatCountdown,
    tick: tick,
    ensureTimer: ensureTimer,
  };
})(typeof window !== "undefined" ? window : globalThis);
