import { defineStore } from 'pinia'

const baseProdInfo = {
  imageData: [],
  videoData: [],
  // 未配置的 活动，多规格，重量
  pic: '', // 商品主图
  imgs: '', // 商品图片
  video: '', // 商品视频
  prodType: 0, // 商品类型(0普通商品 1拼团 2秒杀 3积分 5组合选品)
  mold: 0, // 商品类别 0.实物商品 1. 虚拟商品
  prodName: '', // 商品名称
  brief: '', // 商品卖点
  brandId: null, // 商品品牌
  brandName: null, // 商品品牌
  categoryId: null, // 商品分类
  shopCategoryId: null, // 本店商品分类
  seq: 0, // 商品排序
  preSellStatus: 0, // 预售状态 1：开启 0：未开启
  preSellTime: '', // 预售发货时间
  price: 0.01, // 商品价格
  stockWarning: 0, // 库存预警
  oriPrice: 0, // 商品原价
  totalStocks: 0, // 库存
  stationStock: 0, // 门店库存
  warehouseStock: 0, // 仓库库存
  volume: 0, // 体积
  skuId: null,
  weight: 0.01,
  prodId: 0,
  partyCode: '', // 编码
  skuList: [], // sku列表字符串
  deliveryModeVo: { // 配送方式
    hasUserPickUp: false, // 自提
    hasShopDelivery: true, // 店铺
    hasCityDelivery: false // 同城
  },
  deliveryAmount: 0.01, // 统一运费的金额
  deliveryTemplateId: null, // 运费模板id
  deliveryTemplateName: '', // 运费模板名称
  content: '', // 商品详情
  specifications: false, // 多规格

  useLang: 0, // 语言0中文，1中英文
  selectedType: 1,
  prodParameterList: [], // 参数

  // 选择类目面包屑导航
  classifyName: [
    { categoryName: '', categoryId: null },
    { categoryName: '', categoryId: null },
    { categoryName: '', categoryId: null }
  ],
  virtualRemark: [], // 虚拟商品的留言备注

  isRefund: 0, // 售后服务
  writeOffStart: '', // 核销开始时间
  writeOffEnd: '', // 核销结束时间
  writeOffNum: 0, // 核销次数 -1.多次核销 0.无需核销 1.单次核销
  writeOffTime: -1, // 核销有效期 -1.长期有效 0.自定义 x.x天内有效
  writeOffMultipleCount: -1, // 核销有效次数 -1.无限次
  tableRate: -1, // 0 包邮 -1 固定运费 大于0运费模板id
  skuComboList: [] // 组合商品关联项
}

export const useProdStore = defineStore('prod', {
  // 储存持久化
  persist: true,
  state: () => {
    return {
      dataForm: JSON.parse(JSON.stringify(baseProdInfo)),
      deliveryIndex: {
        index: 2, // 运费选项索引
        pic: 0.01, // 统一运费价格
        id: null, // 运费模板id
        name: '' // 运费模板名称
      },
      // 滚动条位置
      scroll: 0,

      // 是否存在符合配送方式的共享总部门店
      stationDelivery: {
        sameCityDelivery: 1,
        selfPickup: 1
      },
      // 组件显示
      selected: {
        categoryName: '',
        brandName: '',
        preSellTimeName: '',
        deliveryModeName: '',
        deliveryName: '',
        shopCategoryName: ''
      },
      stockPointList: [], // 单规格时，仓库库存列表
      stockPointInfo: {} // 仓库信息
    }
  },
  getters: {
    // 是否是门店商品
    isStationProd: (state) => {
      return !!state.dataForm.stationId
    }
  },
  actions: {
    resetForm () {
      this.dataForm = JSON.parse(JSON.stringify(baseProdInfo))
      this.deliveryIndex = {
        index: 2, // 运费选项索引
        pic: 0.01, // 统一运费价格
        id: null, // 运费模板id
        name: '' // 运费模板名称
      }
      this.selected = {
        categoryName: '',
        brandName: '',
        preSellTimeName: '',
        deliveryModeName: '',
        deliveryName: ''
      }
      this.stockPointList = []
    },
    getPointInfo () {
      // 未获取默认仓库id，则需要获取默认仓库id
      http.request({
        url: '/m/stockPointSku/stockPoint',
        method: 'get'
      }).then(({ data }) => {
        this.stockPointInfo = data
        if (!(this.stockPointList && this.stockPointList.length)) {
          this.stockPointList = []
          // 单规格仓库库存列表无数据时，添加一个默认仓库的数据
          this.stockPointList.push({
            stock: 0,
            stockPointId: data.defaultWarehouseId,
            stockPointType: 1,
            type: 0
          })
        }
      })
    },
    setSkuStock (skuList) {
      if (this.dataForm.mold === 1 || this.dataForm.mold === 2) return
      for (const sku of skuList) {
        const { warehouseStock, stationStock, stocks } = this.calcSkuStock(sku.stockPointList)
        sku.warehouseStock = warehouseStock
        sku.stationStock = stationStock
        sku.stocks = stocks
      }
    },
    // 计算出当前skuitem的库存
    calcSkuStock (stockPointList) {
      let warehouseStock = 0
      let stationStock = 0
      let stocks = 0
      stockPointList?.forEach(stockPoint => {
        if (stockPoint.stockPointType === 1) {
          // 仓库库存
          warehouseStock += stockPoint.stock
        } else {
          // 门店库存
          stationStock += stockPoint.stock
        }
      })
      // sku总库存 = 仓库库存 + 门店库存
      stocks = warehouseStock + stationStock
      return {
        warehouseStock, stationStock, stocks
      }
    }
  }
})
