import type { Token } from './types';

/**
 * 从 token 区间 `[start..end)` 重组回文本（跨端口径）。
 *
 * - 默认：用单空格 join（适用于 whitespacePolicy=NORMALIZE）
 * - 若传入 rawSeparators：按原始分隔符拼接（适用于 whitespacePolicy=PRESERVE）
 *
 * 说明：
 * - `start/end` 为半开区间
 * - 空区间返回空字符串；上层需要用硬约束避免空行
 */
export function joinTokens(tokens: Token[], start: number, end: number, rawSeparators?: string[]): string {
  const s = Math.max(0, start | 0);
  const e = Math.max(0, end | 0);
  if (!Array.isArray(tokens) || tokens.length === 0) return '';
  if (s >= e) return '';

  const slice = tokens.slice(s, e).map((t) => t.text);
  if (!rawSeparators) {
    return slice.join(' ');
  }

  // rawSeparators[i] 表示 tokens[i] 与 tokens[i+1] 之间的分隔符
  // 这里只实现最小可用：若 separators 缺失则回退到单空格。
  let out = '';
  for (let idx = s; idx < e; idx++) {
    const t = tokens[idx];
    if (!t) continue;
    out += t.text;
    if (idx < e - 1) {
      out += rawSeparators[idx] ?? ' ';
    }
  }
  return out;
}

