import type { NormalizeWhitespaceResult, WhitespacePolicy } from './types';

/**
 * 空白归一化（跨端口径）
 *
 * - NORMALIZE：折叠连续空白为单空格，并去首尾空白
 * - PRESERVE：仅去首尾空白（内部空白保持原样）
 *
 * 注意：该函数会改变输入文本（至少会 trim），必须作为“算法契约”的一部分固定下来。
 */
export function normalizeWhitespace(text: string, policy: WhitespacePolicy = 'NORMALIZE'): NormalizeWhitespaceResult {
  const input = String(text ?? '');

  if (policy === 'PRESERVE') {
    const trimmed = input.trim();
    // 只要发生 trim，或内部存在非单空格的分隔（如 \n/\t/多个空格），都算 hadMultiWhitespace
    const hadMultiWhitespace = trimmed !== input || /[\t\r\n]/.test(trimmed) || /  +/.test(trimmed);
    return { normalizedText: trimmed, hadMultiWhitespace };
  }

  // NORMALIZE：把任意连续空白折叠为 1 个空格，并去首尾空白
  // 说明：这里使用 \s+ 覆盖空格/换行/制表等；跨端需要保证采用同等语义的实现。
  const trimmed = input.trim();
  const collapsed = trimmed.replace(/\s+/g, ' ');
  const hadMultiWhitespace = collapsed !== input;
  return { normalizedText: collapsed, hadMultiWhitespace };
}

