/**
 * Text Wrap - width-measurement
 *
 * 本模块负责：
 * - 宽度测量（可注入实现）
 * - 两级缓存（文本/切片）
 * - 测量失败时的确定性降级（approx mode）
 *
 * 注意：真实测量（如 react-native-text-size）通常是异步 Promise，本模块统一使用 async 形式对齐实际能力。
 */

export type TextWrapContext = 'APP' | 'WIDGET';

export type FontSpec = {
  fontSize: number;
  fontFamily: string;
  fontWeight: string;
};

/**
 * 用于区分不同测量语境（缓存隔离）。
 * 口径建议：`APP|<platform>|<scale?>` 或 `WIDGET|<widgetSize?>`
 */
export type ContextProfile = string;

export type MeasureReason = 'WIDTH_UNKNOWN' | 'MEASURE_FAILED';

export type MeasureMeta = {
  isApprox: boolean;
  reason?: MeasureReason;
};

export type MeasureResult = {
  width: number | null;
  meta: MeasureMeta;
};

/**
 * 可注入的测量实现（成熟方法推荐用原生/离屏测量库）。
 * 约定：返回值必须是“有限且非负”的 number，否则视为测量失败。
 */
export type MeasureWidthImpl = (args: {
  text: string;
  context: TextWrapContext;
  fontSpec: FontSpec;
  contextProfile: ContextProfile;
}) => Promise<number>;

