import { IMAGE_BASE_URL } from "@/constants";

/**
 * Check if an element has a class
 * @param {HTMLElement} ele
 * @param {string} cls
 * @returns {boolean}
 */
export function hasClass(ele: HTMLElement, cls: string) {
  return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
}

/**
 * Add class to element
 * @param {HTMLElement} ele
 * @param {string} cls
 */
export function addClass(ele: HTMLElement, cls: string) {
  if (!hasClass(ele, cls)) ele.className += " " + cls;
}

/**
 * Remove class from element
 * @param {HTMLElement} ele
 * @param {string} cls
 */
export function removeClass(ele: HTMLElement, cls: string) {
  if (hasClass(ele, cls)) {
    const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
    ele.className = ele.className.replace(reg, " ");
  }
}

/**
 * 判断是否是外部链接
 *
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path: string) {
  const isExternal = /^(https?:|http?:|mailto:|tel:)/.test(path);
  return isExternal;
}

/**
 * 格式化增长率，保留两位小数 ，并且去掉末尾的0  取绝对值
 *
 * @param growthRate
 * @returns
 */
export function formatGrowthRate(growthRate: number) {
  if (growthRate === 0) {
    return "-";
  }

  const formattedRate = Math.abs(growthRate * 100)
    .toFixed(2)
    .replace(/\.?0+$/, "");
  return formattedRate + "%";
}

/**
 * 获取完整图片URL
 * 如果是相对路径，则拼接前缀；如果已经是完整URL，则直接返回
 *
 * @param {string | undefined} url - 图片路径
 * @returns {string} 完整的图片URL
 */
export function getFullImageUrl(url: string | undefined): string {
  if (!url) return "";
  // 如果已经是完整的URL（http://或https://），直接返回
  if (url.startsWith("http://") || url.startsWith("https://")) {
    return url;
  }
  // 将反斜杠转换为正斜杠，并确保路径以斜杠开头
  let normalizedUrl = url.replace(/\\/g, "/");
  if (!normalizedUrl.startsWith("/")) {
    normalizedUrl = "/" + normalizedUrl;
  }
  const fullUrl = IMAGE_BASE_URL + normalizedUrl;
  return fullUrl;
}
