/**
 * 数据源行：平面图 dataSources 列表项至少含 `id`（与 {@link FloorMapSceneElementDataBinding.recordId} 对应）。
 */

/**
 * 按画布图元上的 `dataBinding` 在 `dataSources[dataSourceKey]` 中查找对应行。
 * 与 private-materials 预约 `findReservationRow` 算法一致：`recordId` 与行的 `id` 均按字符串比较。
 */
export function findFloorMapRowByDataBinding(item, dataSources) {
  var _item$_sceneElement;
  var binding = (_item$_sceneElement = item._sceneElement) === null || _item$_sceneElement === void 0 ? void 0 : _item$_sceneElement.dataBinding;
  if (!(binding !== null && binding !== void 0 && binding.dataSourceKey) || binding.recordId == null) return undefined;
  var list = dataSources[binding.dataSourceKey];
  var rid = String(binding.recordId);
  return list === null || list === void 0 ? void 0 : list.find(function (r) {
    return r.id === rid;
  });
}

/**
 * 当 {@link findFloorMapRowByDataBinding} 无结果时，占位卡可据此选择文案（业务层自行 i18n）。
 */

/**
 * 若已能解析到数据源行则返回 `null`；否则返回占位原因（不含文案，便于各业务映射 locales）。
 */
export function getFloorMapBindingPlaceholderReason(item, dataSources) {
  var _item$_sceneElement2;
  if (findFloorMapRowByDataBinding(item, dataSources)) return null;
  var binding = (_item$_sceneElement2 = item._sceneElement) === null || _item$_sceneElement2 === void 0 ? void 0 : _item$_sceneElement2.dataBinding;
  var hasKey = Boolean((binding === null || binding === void 0 ? void 0 : binding.dataSourceKey) && String(binding.dataSourceKey).trim() !== '');
  var rid = (binding === null || binding === void 0 ? void 0 : binding.recordId) != null ? String(binding.recordId).trim() : '';
  if (!hasKey) return 'missing_data_source_key';
  if (!rid) return 'missing_record_id';
  if (rid.startsWith('new_')) return 'new_unsaved_slot';
  return 'record_not_in_list';
}