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); }
/**
 * 灵活时长（flexible duration）协议工具。
 *
 * info2 用 `flexible_<minutes>` 字符串前缀标记"灵活时长"，对外用同名 API 暴露 create / getValue / isFlexible / add。
 * OS 这边一比一搬运，无外部依赖。
 */

var PREFIX = 'flexible_';
export var flexibleObj = {
  create: function create(num) {
    return "".concat(PREFIX).concat(num);
  },
  getValue: function getValue(str) {
    if (typeof str === 'string' && flexibleObj.isFlexible(str)) {
      return Number(str.replace(PREFIX, ''));
    }
    return Number(str);
  },
  isFlexible: function isFlexible(str) {
    if (typeof str !== 'string') return false;
    return str.indexOf(PREFIX) > -1;
  },
  add: function add(current, duration) {
    if (flexibleObj.isFlexible(current)) {
      return flexibleObj.create(flexibleObj.getValue(current) + duration);
    }
    return Number(current) + duration;
  }
};

/**
 * 取 duration 数值（兼容 number / { type, value } / 灵活时长字符串）。
 * 与 info2 `getDuration` 行为等价。
 */
/**
 * 商品定义是否为「灵活时长」类型（仅看 product.duration 对象，不把 flexible_423 字符串当类型）。
 * 与 info2 `getDuration({ type: 'flexible' }) === 'flexible'` 判定对齐。
 */
export function isProductFlexibleDuration(duration) {
  return Boolean(duration && _typeof(duration) === 'object' && duration.type === 'flexible');
}
export function getDurationValue(duration) {
  if (duration === undefined || duration === null) return undefined;
  if (typeof duration === 'number') return duration;
  if (typeof duration === 'string') {
    if (flexibleObj.isFlexible(duration)) return 'flexible';
    return Number(duration);
  }
  if (_typeof(duration) === 'object') {
    if (duration.type === 'minutes') return duration.value;
    if (duration.type === 'flexible') return 'flexible';
    if (duration.type === 'days') return duration.value;
  }
  return undefined;
}