// ========== 商品相关的 Util ==========

/**
 * 从商品 SKU 数组中,转换出商品属性的数组
 *
 * 类似结构:[{
 *    id: // 属性的编号
 *    name: // 属性的名字
 *    values: [{
 *      id: // 属性值的编号
 *      name: // 属性值的名字
 *    }]
 * }]
 *
 * @param skus 商品 SKU 数组
 */
export function convertProductPropertyList(skus) {
  let result = [];
  for (const sku of skus) {
    if (!sku.properties) {
      continue
    }
    for (const property of sku.properties) {
      // ① 先处理属性
      let resultProperty = result.find(item => item.id === property.propertyId)
      if (!resultProperty) {
        resultProperty = {
          id: property.propertyId,
          name: property.propertyName,
          values: []
        }
        result.push(resultProperty)
      }
      // ② 再处理属性值
      let resultValue = resultProperty.values.find(item => item.id === property.valueId)
      if (!resultValue) {
        resultProperty.values.push({
          id: property.valueId,
          name: property.valueName
        })
      }
    }
  }
  return result;
}

/**
 * 从商品 SKU 数组中,转换出商品 SKU Map
 *
 * key: 属性值的拼接,使用 , 间隔,例如说 黑色,CH510
 *
 * @param skus 商品 SKU Map
 */
export function convertProductSkuMap(skus) {
  let result = {};
  for (const sku of skus) {
    let key = '';
    if (!sku.properties) {
      continue
    }
    for (const property of sku.properties) {
      if (key !== '') {
        key += ','
      }
      key += property.valueName
    }
    result[key] = sku
  }
  return result
}

/**
 * 根据 SPU 的活动展示顺序,排序活动列表
 *
 * @param activityList 原始的活动列表
 * @param spu
 * @return 新的活动列表
 */
export function sortActivityList(activityList, spu) {
  if (!spu || !spu.activityOrders) {
    return activityList;
  }
  const result = [];
  for (const activityOrder of spu.activityOrders) {
    for (const activity of activityList) {
      if (activity.type === activityOrder) {
        result.push(activity)
      }
    }
  }
  return result;
}

/**
 * 将营销活动,设置到 SPU 中
 *
 * @param spuList SPU 数组
 * @param activityListMap 营销活动 Map,key 为 SPU ID,value 为营销活动数组
 */
export function setActivityList(spuList, activityListMap) {
  if (!spuList || spuList.length === 0) {
    return;
  }
  for (const spu of spuList) {
    spu.activityList = activityListMap[spu.id + ''] || [];
    spu.activityList = sortActivityList(spu.activityList, spu);
  }
}