/**
 * 充电桩大盘 - 公共工具模块
 */

/**
 * HTML 转义，防止 XSS（纯字符串实现，避免创建临时 DOM 元素）
 */
export function escapeHtml(str) {
  return String(str ?? '')
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#039;');
}

/**
 * 统一的 lucide 图标刷新（debounce 50ms）
 * 将多次散落的 lucide.createIcons() 调用合并为一次 DOM 扫描
 */
let _iconTimer = null;
export function refreshIcons() {
  if (_iconTimer) clearTimeout(_iconTimer);
  _iconTimer = setTimeout(() => {
    _iconTimer = null;
    if (typeof lucide !== 'undefined') lucide.createIcons();
  }, 50);
}

/**
 * 立即刷新图标（用于初始化等需要同步执行的场景）
 */
export function refreshIconsNow() {
  if (_iconTimer) { clearTimeout(_iconTimer); _iconTimer = null; }
  if (typeof lucide !== 'undefined') lucide.createIcons();
}

/**
 * 显示 Toast 消息
 */
export function showToast(msg, type = 'success') {
  const existing = document.querySelector('.toast');
  if (existing) existing.remove();

  const toast = document.createElement('div');
  toast.className = `toast toast-${type}`;
  toast.innerHTML = `
    <i data-lucide="${type === 'success' ? 'check-circle-2' : 'alert-triangle'}" class="w-5 h-5"></i>
    <span></span>
  `;
  toast.querySelector('span').textContent = msg;
  document.body.appendChild(toast);
  refreshIcons();
  setTimeout(() => toast.remove(), 3000);
}
