// number-to-chinese.ts

/**
 * 将阿拉伯数字转换为中文大写数字（支持 0 到 9999）
 * @param num 输入的数字
 * @returns 中文大写数字字符串
 */
export function numberToChinese(num: number): string {
  const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
  const units = ['', '十', '百', '千'];

  if (num === 0) return chineseNums[0];
  if (num < 0 || num > 9999) {
    throw new Error('仅支持 0 到 9999 的整数');
  }

  let result = '';
  const digits = Math.floor(Math.log10(num)) + 1;

  for (let i = 0; i < digits; i++) {
    const divisor = Math.pow(10, digits - i - 1);
    const digit = Math.floor(num / divisor) % 10;
    const unitIndex = digits - i - 1;

    if (digit !== 0) {
      result += chineseNums[digit] + units[unitIndex];
    } else if (result.length > 0 && !result.endsWith(chineseNums[0])) {
      // 添加“零”但避免连续多个“零”
      result += chineseNums[0];
    }
  }

  // 特殊处理：“一十” → “十”
  if (digits === 2 && num % 10 === 0) {
    result = result.replace(/^一十/, '十');
  }

  return result;
}
