import store from "../store/store";

/**
 * @title 检查SKU库存是否可以售卖
 * @description
 * 首先受到 SKU 的 is_track 字段的影响，如果 is_track 为 0，表示不跟踪库存，则不检查库存
 * 其次受到 SKU 的 over_sold 字段 和 config.overSold 配置的影响，如果 over_sold 为 1 或 config.overSold 为 true，表示允许超卖，则不检查库存
 * 最后受到 SKU 的 stock_quantity 字段的影响，如果 stock_quantity 小于等于 0，表示库存不足
 */
export var checkSkuStockCanSell = function checkSkuStockCanSell(sku) {
  var canSell = true; // 是否可以售卖
  var hasStock = true; // 是否还有库存
  // 如果追踪库存
  if ((sku === null || sku === void 0 ? void 0 : sku.is_track) === 1) {
    var _store$getState$confi;
    // 如果允许超卖，则不检查库存
    if ((sku === null || sku === void 0 ? void 0 : sku.over_sold) === 1 || (_store$getState$confi = store.getState().config) !== null && _store$getState$confi !== void 0 && _store$getState$confi.overSold) {
      canSell = true;
      hasStock = Number((sku === null || sku === void 0 ? void 0 : sku.stock_quantity) || 0) > 0;
    } else {
      // 追踪库存 & 不允许超卖，则检查库存
      if (Number((sku === null || sku === void 0 ? void 0 : sku.stock_quantity) || 0) <= 0) {
        canSell = false;
        hasStock = false;
      }
    }
  } else {
    // 不跟踪库存，则可以售卖
    canSell = true;
    hasStock = true;
  }
  return {
    canSell: canSell,
    hasStock: hasStock
  };
};

/**
 * @title 检查SKU是否禁用
 * @description 如果SKU被禁用，或者库存不足不能售卖，则返回 true
 */
export var checkSkuDisabled = function checkSkuDisabled(sku) {
  var canSell = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  return (sku === null || sku === void 0 ? void 0 : sku.is_enabled) === 0 || !canSell;
};

/**
 * @title 组合规格库存检查（初始化时使用）
 * @description 检查包含该规格选项的所有组合商品的库存状态
 */
export var checkVariantStockCanSell = function checkVariantStockCanSell(sku) {
  var dataSource = store.getState().dataSource;
  var variant = (dataSource === null || dataSource === void 0 ? void 0 : dataSource.variant) || [];
  var variantSkuId = "".concat(sku === null || sku === void 0 ? void 0 : sku.variant_group_id, ":").concat(sku === null || sku === void 0 ? void 0 : sku.id);

  // 过滤出包含该规格的所有组合商品
  var matchedVariants = variant.filter(function (item) {
    var _item$sku_ids;
    var ids = (item === null || item === void 0 || (_item$sku_ids = item.sku_ids) === null || _item$sku_ids === void 0 ? void 0 : _item$sku_ids.split('_')) || [];
    return ids.includes(variantSkuId);
  });

  // 如果没有匹配的商品，返回默认不可售
  if (matchedVariants.length === 0) {
    return {
      canSell: false,
      hasStock: false
    };
  }

  // 检查所有匹配商品的库存状态
  var results = matchedVariants.map(function (item) {
    return checkSkuStockCanSell(item);
  });
  return {
    // 只要有一个能售卖则可选
    canSell: results.some(function (r) {
      return r.canSell;
    }),
    // 只要有一个有库存则显示有库存
    hasStock: results.some(function (r) {
      return r.hasStock;
    })
  };
};

/**
 * @title 根据已经选择的规格选项，筛选出包含对应规格的商品并进行库存检查
 * @description
 * 1. 收集当前判断的规格 + 其他规格组已选的规格（排除当前规格组）
 * 2. 根据收集的规格，筛选出包含对应规格的组合商品
 * 3. 对筛选出的商品进行库存检查
 * 4. 只要有一个匹配商品能售卖，则该选项可选
 * 5. 只要有一个匹配商品有库存，则显示有库存
 */
export var checkVariantStockByValue = function checkVariantStockByValue(sku) {
  var _dataSource$variant_g;
  var dataSource = store.getState().dataSource;
  var variant = (dataSource === null || dataSource === void 0 ? void 0 : dataSource.variant) || [];
  var selectorValue = store.getState().selectorValue;

  // 当前判断的规格
  var currentSkuId = "".concat(sku === null || sku === void 0 ? void 0 : sku.variant_group_id, ":").concat(sku === null || sku === void 0 ? void 0 : sku.id);
  var selectedVariantIds = [currentSkuId];

  // 遍历所有规格组，获取已选的规格
  dataSource === null || dataSource === void 0 || (_dataSource$variant_g = dataSource.variant_group) === null || _dataSource$variant_g === void 0 || _dataSource$variant_g.forEach(function (group) {
    var _selectorValue$group$;
    var _selectedData = selectorValue === null || selectorValue === void 0 || (_selectorValue$group$ = selectorValue[group.id]) === null || _selectorValue$group$ === void 0 ? void 0 : _selectorValue$group$.data;

    // 关键：跳过当前规格所在的组（避免冲突）
    // 例如：判断「M」是否可选时，不应该把同组已选的「S」算进去
    if (_selectedData && group.id !== (sku === null || sku === void 0 ? void 0 : sku.variant_group_id)) {
      selectedVariantIds.push("".concat(_selectedData === null || _selectedData === void 0 ? void 0 : _selectedData.variant_group_id, ":").concat(_selectedData === null || _selectedData === void 0 ? void 0 : _selectedData.id));
    }
  });

  // 过滤出包含所有所选规格的商品
  var filteredVariant = variant.filter(function (item) {
    var _item$sku_ids2;
    var ids = (item === null || item === void 0 || (_item$sku_ids2 = item.sku_ids) === null || _item$sku_ids2 === void 0 ? void 0 : _item$sku_ids2.split('_')) || [];
    return selectedVariantIds.every(function (selectedId) {
      return ids.includes(selectedId);
    });
  });

  // 对过滤出的商品进行库存检查
  var _canSellResult = [];
  var _hasStockResult = [];
  filteredVariant.forEach(function (item) {
    var _checkSkuStockCanSell = checkSkuStockCanSell(item),
      canSell = _checkSkuStockCanSell.canSell,
      hasStock = _checkSkuStockCanSell.hasStock;
    _canSellResult.push(canSell);
    _hasStockResult.push(hasStock);
  });
  return {
    // 只要有一个匹配商品能售卖，则该选项可选
    canSell: _canSellResult.some(function (item) {
      return item === true;
    }),
    // 只要有一个存在库存则为true
    hasStock: _hasStockResult.some(function (item) {
      return item === true;
    })
  };
};