// 文本测量工具函数
// 来源: u-charts.ts

/**
 * 文本度量结果接口
 */
export interface TextMeasure {
  width: number;
}

/**
 * 测量文本宽度
 * @param text - 待测量的文本
 * @param fontSize - 字体大小
 * @param context - Canvas 渲染上下文（可选，如果不提供则使用估算方式）
 * @returns 文本宽度
 */
export function measureText(
  text: string | number,
  fontSize: number,
  context?: any
): number {
  let width = 0;
  text = String(text);
  // #ifdef MP-ALIPAY || MP-BAIDU || APP-NVUE
  context = false;
  // #endif
  if (context !== false && context !== undefined && context.setFontSize && context.measureText) {
    context.setFontSize(fontSize);
    return context.measureText(text).width;
  } else {
    let textChars = text.split('');
    for (let i = 0; i < textChars.length; i++) {
      let item = textChars[i];
      if (/[a-zA-Z]/.test(item)) {
        width += 7;
      } else if (/[0-9]/.test(item)) {
        width += 5.5;
      } else if (/\./.test(item)) {
        width += 2.7;
      } else if (/-/.test(item)) {
        width += 3.25;
      } else if (/:/.test(item)) {
        width += 2.5;
      } else if (/[\u4e00-\u9fa5]/.test(item)) {
        width += 10;
      } else if (/\(|\)/.test(item)) {
        width += 3.73;
      } else if (/\s/.test(item)) {
        width += 2.5;
      } else if (/%/.test(item)) {
        width += 8;
      } else {
        width += 10;
      }
    }
    return width * fontSize / 10;
  }
}
