function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
/**
 * 「将图元名作为资源标题」开关：通用读写 + 标题解析。
 *
 * - 持久化在 `sceneElement.extensions[NAME_AS_TITLE_EXT_KEY]`，避免污染顶层 schema、
 *   不影响未启用该能力的旧 / 新 kind。
 * - 是否在编辑面板「显示」该选项，由 `FloorMapElementKindConfig.nameAsTitleConfigurable`
 *   控制；展示侧（业务卡片渲染）只读 extensions，不依赖 kindConfig，确保即便业务方
 *   后续撤回 kindConfig 开关，已落库的偏好仍生效。
 */

/** 持久化字段名：固定字符串，跨包共用，勿改 */
export var NAME_AS_TITLE_EXT_KEY = 'nameAsTitle';
/** 安全读取「图元名作为标题」开关 */
export function isElementNameAsTitleEnabled(el) {
  var _el$extensions;
  if (!el) return false;
  var v = (_el$extensions = el.extensions) === null || _el$extensions === void 0 ? void 0 : _el$extensions[NAME_AS_TITLE_EXT_KEY];
  return v === true;
}

/**
 * 计算 `extensions` patch：返回值供调用方写入 `sceneElement.extensions`。
 *
 * - `enabled === true` 时写入 `true`；
 * - `enabled === false` 时**移除**该 key（而非写 `false`），避免持久化里残留无意义字段；
 * - 返回 `undefined` 表示「extensions 整体可清空」（仅当结果是空对象时）。
 *
 * @example
 * const nextExt = buildNameAsTitleExtensionsPatch(el.extensions, true);
 * onUpdate({ extensions: nextExt });
 */
export function buildNameAsTitleExtensionsPatch(prev, enabled) {
  var base = _objectSpread({}, prev !== null && prev !== void 0 ? prev : {});
  if (enabled) {
    base[NAME_AS_TITLE_EXT_KEY] = true;
  } else {
    delete base[NAME_AS_TITLE_EXT_KEY];
  }
  return Object.keys(base).length > 0 ? base : undefined;
}

/**
 * 通用图元标题解析：业务展示层（卡片标题、占位标题等）统一调用本函数，
 * 让「图元名作为资源标题」这一偏好对所有接入方一致生效。
 *
 * 优先级：
 *   1. 启用了 nameAsTitle 且 `el.name` 非空 → `el.name`
 *   2. `recordTitle`（业务侧按自己规则算出来的，如预约页 `row.main_field` / `row.code`）
 *   3. `el.name`（业务字段缺失时的兜底，与历史行为一致）
 *   4. `fallback`（如 kindLabel）
 *   5. 空串
 *
 * 不更改 `displayRoomTitleFromRow` / `record.name` 等业务函数本身，
 * 业务方只需把"按业务字段"算出来的结果以 `recordTitle` 传入即可，
 * `bookingDetailModal` 等下游不会被联动改坏。
 */
export function resolveSceneElementDisplayTitle(opts) {
  var sceneElement = opts.sceneElement,
    recordTitle = opts.recordTitle,
    fallback = opts.fallback;
  var elName = (sceneElement === null || sceneElement === void 0 ? void 0 : sceneElement.name) != null ? String(sceneElement.name).trim() : '';
  var rt = recordTitle != null ? String(recordTitle).trim() : '';
  var fb = fallback != null ? String(fallback).trim() : '';
  if (isElementNameAsTitleEnabled(sceneElement) && elName) {
    return elName;
  }
  return rt || elName || fb || '';
}