import { useMemo } from 'react';
import { resolveWeighingSource } from "./utils";
/**
 * 推导当前选中 variant（或商品根级）的称重状态及计价所需配置。
 *
 * 价格来源规则（对齐 getSelectedUnitPrice）：
 * - 有 variant：取 variant.base_price ?? variant.original_price
 * - 无 variant：取 productData.base_price ?? productData._extend?.price
 */
export var useWeighing = function useWeighing(_ref) {
  var productData = _ref.productData,
    skuValue = _ref.skuValue;
  return useMemo(function () {
    var _ref2, _source$base_price, _ref3, _pd$base_price, _pd$_extend;
    var pd = productData;
    var variantId = skuValue === null || skuValue === void 0 ? void 0 : skuValue.product_variant_id;
    var hasVariants = Array.isArray(pd === null || pd === void 0 ? void 0 : pd.variant) && pd.variant.length > 0;

    // 商品含 variants 时，主商品不参与称重判断：
    // 必须选定具体 variant 才可能是称重商品。
    if (hasVariants && !variantId) {
      return {
        isWeighingProduct: false
      };
    }
    var source = resolveWeighingSource(productData, variantId);
    var isWeighing = Number((source === null || source === void 0 ? void 0 : source.open_sold_weight) || 0) === 1;
    if (!isWeighing) {
      return {
        isWeighingProduct: false
      };
    }
    var basePrice = variantId ? Number((_ref2 = (_source$base_price = source === null || source === void 0 ? void 0 : source.base_price) !== null && _source$base_price !== void 0 ? _source$base_price : source === null || source === void 0 ? void 0 : source.original_price) !== null && _ref2 !== void 0 ? _ref2 : 0) : Number((_ref3 = (_pd$base_price = pd === null || pd === void 0 ? void 0 : pd.base_price) !== null && _pd$base_price !== void 0 ? _pd$base_price : pd === null || pd === void 0 || (_pd$_extend = pd._extend) === null || _pd$_extend === void 0 ? void 0 : _pd$_extend.price) !== null && _ref3 !== void 0 ? _ref3 : 0);
    var _pd = {
      id: productData.id,
      variant_id: skuValue.product_variant_id,
      price: basePrice,
      unit: source === null || source === void 0 ? void 0 : source.unit,
      unit_value: Number(source === null || source === void 0 ? void 0 : source.unit_value) || 1
    };
    return {
      isWeighingProduct: true,
      scalePriceProduct: _pd
    };
  }, [productData, skuValue === null || skuValue === void 0 ? void 0 : skuValue.product_variant_id]);
};