import dayjs from 'dayjs';
import { getServiceTimes } from "./serviceTimes";

/**
 * 结构化的「资源不可用」原因（替代 info2 `getErrorList` 输出的 i18n 文案 + type 字段）。
 *
 * 与 info2 type 字段映射：
 *   - `no_product` ↔ type='products'
 *   - `time_out_of_range` ↔ type='time'
 *   - `count_out_of_range` ↔ type='limit'
 *   - `resource_unbound` ↔ type='unbound'
 *
 * OS 这边不耦合 i18n 文案，UI 拿到 reason + params 后自行渲染（参考 docs/SDK 中给出的 i18n key 对照表）。
 */

/**
 * 替代 info2 `utilsByBooking.ts#getErrorList`，输出结构化错误。
 *
 * 行为对齐：
 *   1. cacheItem 没有 id → `no_product`（与 info2 `!cacheItem?.id` 分支等价）。
 *   2. 资源 null / 无 _extend → 返回 []。
 *   3. resource.usable=false 时：
 *      - 没有 _extend.usableTime → `time_out_of_range`
 *      - 有 usableTime 但 `_extend.isCountRange=false` → `count_out_of_range`
 *   4. resource.unbound=true → 追加 `resource_unbound`。
 *   5. 不再耦合 `_data.resourceMaps[form_id].type === 'single'` 判断（与 info2 实际未使用此变量一致）。
 */
export function getResourceErrors(resource, cacheItem) {
  if (!(cacheItem !== null && cacheItem !== void 0 && cacheItem.id)) {
    return [{
      reason: 'no_product',
      params: {}
    }];
  }
  if (!resource) return [];
  var list = [];
  if (!resource.usable) {
    var _resource$_extend, _resource$_extend2;
    var _getServiceTimes = getServiceTimes(cacheItem),
      startDate = _getServiceTimes.startDate,
      endDate = _getServiceTimes.endDate;
    var startText = startDate.format('hh:mm A');
    var endText = endDate.format('hh:mm A');
    var isCrossDay = dayjs(endDate).isAfter(startDate, 'day');
    if (!((_resource$_extend = resource._extend) !== null && _resource$_extend !== void 0 && _resource$_extend.usableTime)) {
      list.push({
        reason: 'time_out_of_range',
        params: {
          labelText: resource.labelText,
          startText: startText,
          endText: endText,
          isCrossDay: isCrossDay
        }
      });
    } else if (!((_resource$_extend2 = resource._extend) !== null && _resource$_extend2 !== void 0 && (_resource$_extend2 = _resource$_extend2.usableTime) !== null && _resource$_extend2 !== void 0 && (_resource$_extend2 = _resource$_extend2._extend) !== null && _resource$_extend2 !== void 0 && _resource$_extend2.isCountRange)) {
      list.push({
        reason: 'count_out_of_range',
        params: {
          labelText: resource.labelText,
          startText: startText,
          endText: endText,
          isCrossDay: isCrossDay
        }
      });
    }
  }
  if (resource.unbound) {
    list.push({
      reason: 'resource_unbound',
      params: {}
    });
  }
  return list;
}