/**
 * 外键关联行 → 下拉/表格可读文案（物料、仓库、单号等）。
 * 与 tableMixin.getRowLabel 语义一致；页面加载 select_sources 时请用 rowsToIdOptions，避免各处重复 map。
 */

export function getForeignRowLabel(row) {
  if (!row) return '';
  return (
    row.sku_name ||
    row.spu_name ||
    row.category_name ||
    row.name ||
    row.code ||
    row.spu_code ||
    row.sku_code ||
    row.title ||
    row.label ||
    String(row.id != null ? row.id : '')
  );
}

/**
 * 将 /model/all 等接口返回的行列表转为 Select 用的 { key, value }（key 与数字 id 对齐）
 * @param {Array} rows
 * @param {function(object): string} [getLabel=getForeignRowLabel] 自定义展示，例如收货明细「编码 - 名称」
 */
export function rowsToIdOptions(rows, getLabel = getForeignRowLabel) {
  if (!Array.isArray(rows)) return [];
  return rows.map((r) => {
    const rawId = r.id;
    const key =
      rawId !== null && rawId !== undefined && rawId !== ''
        ? Number(rawId)
        : rawId;
    return {
      key: Number.isFinite(key) ? key : rawId,
      value: getLabel(r),
    };
  });
}
