// packageI/groupWork/components/yz_specsV2/yz_specs.js
var specsManage = []; //选择池 用于排序
var optionsId = 0; //选择后的 规格ID
const app = getApp();
Component({
  /**
   * 组件的属性列表
   */
  options: {
    multipleSlots: true // 在组件定义时的选项中启用多slot支持
  },
  properties: {
    show: {
      type: Boolean,
      value: false
    },
    isRent: {
      type: Boolean,
      value: false
    },
    //主题色
    themeColor: {
      type: String,
      value: "#f14e4e"
    },
    goods: {
      type: Object,
      value: () => ({})
    },
    goodSpecs: {
      type: Array,
      value: () => []
    },
    options: {
      type: Array,
      value: () => []
    },
    disableStepperInput: {
      type: Boolean, //是否禁用步进器输入
      value: false
    },
    quota: {
      type: Number,
      value: -1 //限购数，-1按库存设置限购数，0不限购
    },
    startSaleNum: {
      type: Number,
      value: 1 //起售数量
    },
    hiddenBuyBtn: {
      type: Boolean, //是否隐藏默认购买按钮
      value: false
    },
  },

  /**
   * 组件的初始数据
   */
  data: {
    popThumb: "", //顶部商品图片
    popPrice: "", //顶部商品价格
    popStock: "", //顶部商品库存
    popDescription: "", //顶部商品描述
    popUnit: "", //单位
    optionsMaxCount: 0, //库存
    selectedNum: 1, // 选择的商品数量

    skuImages: [],
    specs: []
  },
  observers: {
    show(newV,oldV) {
      if (newV) {
        this.initPopView();
      }
    },
  },

  /**
   * 组件的方法列表
   */
  methods: {
    initPopView() {
      //初始化顶部商品信息
      console.log("初始化顶部商品信息", this.data.goods);
      this.setData({
        popThumb: this.data.goods.hasOwnProperty("thumb") ? this.data.goods.thumb : "",
        popPrice: this.data.goods.hasOwnProperty("price") ? this.data.goods.price : "",
        popStock: this.data.goods.hasOwnProperty("stock") ? this.data.goods.stock : null,
        popUnit: this.data.goods.hasOwnProperty("unit") ? this.data.goods.unit : "",
        specs: this.data.goodSpecs,
        popDescription: null
      });

      specsManage = [];
      optionsId = 0;

      this.initSkuIMG();
      this.initSku();
    },
    initSku() {
      //默认选择第一个
      if (this.data.goods.has_option == 1) {
        console.log("00000000000",this.data.specs,this.data.options);
        if (this.data.specs.length==0 || this.data.options.length==0) return;
        console.log("sssssssssss");
        this.data.options.forEach((val, index) => {
          let _thumb = !app._isTextEmpty(val.thumb) ? val.thumb : this.data.goods.thumb;
          this.data.skuImages.push(_thumb);
        });
        // 默认选择第一个
        for (let i = 0; i < this.data.specs.length; i++) {
          this.data.specs[i].description = this.data.specs[i].specitem[0];
          console.log("1111111111111111111");
          // this.selectSpecs(this.data.specs[i].specitem[0]);
          this.selectSpecs(this.data.specs[i].specitem[0], 'first', i);
        }
      } else {
        this.data.goods.thumb&&this.data.skuImages.push(this.data.goods.thumb);
      }
      this.setData({
        skuImages: this.data.skuImages,
        specs: this.data.specs,
        optionsMaxCount: this.data.popStock
      });
    },
    getSkuData() {
      let skuData = {
        price: this.data.popPrice,
        stock: this.data.popStock,
        selectedNum: this.data.selectedNum,
        has_option: this.data.goods.has_option,
        optionsId: optionsId
      };
      return skuData;
    },
    buyClicked() {
      //点击购买触发
      this.triggerEvent("buy-clicked", this.getSkuData());
    },
    stepperPlus() {
      this.triggerEvent("stepper-plus", this.getSkuData());
    },
    stepperMinus() {
      this.triggerEvent("stepper-minus", this.getSkuData());
    },
    stepperChange() {
      this.triggerEvent("stepper-change", this.getSkuData());
    },
    setPrice(e) {
      //设置价格
      if (e) {
        this.setData({
          popPrice: e
        });
      }
    },
    setStock(e) {
      //设置库存
      if (e) {
        this.setData({
          popStock: e
        });
      }
    },

    //界面选择规格触发事件
    selectSpecs(e, str, i) {
      let data = {};
      let specsIdex = 0;
      if (str == 'first') {
        specsIdex = i;
        data = e;
      } else if(str =="sku_swiper"){
        data = e;
      } else {
        specsIdex = e.currentTarget.dataset.specsidex;
        data = e.currentTarget.dataset.specitem;
      }

      if (data.c) {
        return false;
      }
      this.setData({
        ["specs[" + specsIdex + "].description"]: data.id
      });
      this.manageSpecs(data); //处理选择池
      this.setGoodsSpecs(data); //处理规格组合选择状态
      this.setGoodsSpecsChangeInfo(); //设置选择规格后的 价格、照片、库存
      this.getMaxCount(); //判断当前购买总量与库存的关系
    },
    //处理选择池
    manageSpecs(data) {
      var specsObject = {};
      specsObject.id = data.id;
      specsObject.specid = data.specid;
      specsObject.title = data.title;

      if (specsManage.length > 0) {
        for (let i = 0; i < specsManage.length; i++) {
          if (specsManage[i].specid == specsObject.specid) {
            specsManage.splice(i, 1);
          }
        }
        specsManage.push(specsObject);
      } else {
        specsManage.push(specsObject);
      }

      //排序
      if (specsManage.length == this.data.specs.length) {
        var newSpecsManage = [];
        for (let i = 0; i < this.data.specs.length; i++) {
          for (let j = 0; j < specsManage.length; j++) {
            if (this.data.specs[i].id == specsManage[j].specid) {
              newSpecsManage.push(specsManage[j]);
              break;
            }
          }
        }
        specsManage = newSpecsManage;
      }
      this.setGoodsDescription();
    },

    //处理goodsDescription 数据
    setGoodsDescription() {
      var description = "";
      //相等代表全选了 体现语句
      if (specsManage.length == this.data.specs.length) {
        description = "已选择 ";
        for (let i = 0; i < specsManage.length; i++) {
          description += specsManage[i].title + " ";
        }
      } else {
        description = "请选择 ";
        for (let i = 0; i < this.data.specs.length; i++) {
          for (let j = 0; j < specsManage.length; j++) {
            if (this.data.specs[i].id != specsManage[j].specid) {
              description += this.data.specs[i].title + " ";
              break;
            }
          }
        }
      }
      this.setData({
        popDescription: description
      });
    },
    //处理规格组合选择状态 过滤数据
    setGoodsSpecs(specs) {
      for (let i = 0; i < this.data.specs.length; i++) {
        if (specs.specid != this.data.specs[i].id) {
          this.setGoodsSpecsStatus(this.data.specs[i].specitem, specs.id);
        }
      }
    },
    //处理规格组合选择状态 处理状态 specitem 组合数组(未选中的) id当前选中的ID 根据ID 组合算是否有当前组合
    setGoodsSpecsStatus(specitem, id) {
      // console.log(specitem);
      // console.log(id);
      let options = []; //数据池

      for (let i = 0; i < this.data.options.length; i++) {
        // console.log(this.options[i].specs);
        let _specs = this.data.options[i].specs.split("_");
        //console.log(_specs);
        //判断是否包含
        for (let j = 0; j < _specs.length; j++) {
          if (_specs[j] == id) {
            options.push(this.data.options[i]);
            return;
          }
        }
      }

      //关键处理方式 后期要优化 效率低
      for (let m = 0; m < options.length; m++) {
        let _specs = options[m].specs.split("_");
        for (let y = 0; y < _specs.length; y++) {
          if (_specs[y] != id && options[m].stock == 0) {
            for (let n = 0; n < specitem.length; n++) {
              if (_specs[y] == specitem[n].id) {
                specitem[n].c = true;
                return;
              }
            }
          } else if (_specs[y] != id && options[m].stock > 0) {
            for (let n = 0; n < specitem.length; n++) {
              if (_specs[y] == specitem[n].id) {
                specitem[n].c = false;
                return;
              }
            }
          }
        }
      }

      console.log(options);
    },
    //设置选择规格后的 价格、照片、库存
    setGoodsSpecsChangeInfo() {
      //根据ID 排序 specsManage.sort();
      specsManage.sort(function(a, b) {
        return a.id - b.id;
      });
      if (specsManage.length == this.data.specs.length) {
        let goodsSpecs = "";
        for (let j = 0; j < specsManage.length; j++) {
          goodsSpecs += specsManage[j].id + "_";
        }
        goodsSpecs = goodsSpecs.substring(0, goodsSpecs.length - 1); //处理"_"
        // console.log('goodsSpecs', goodsSpecs)
        for (let i = 0; i < this.data.options.length; i++) {
          if (goodsSpecs == this.setGoodsSpecsBySort(this.data.options[i].specs)) {
            this.setData({
              activeSkuIndex: i,
              popPrice: this.data.options[i].product_price, //设置价格
              popThumb: app._isTextEmpty(this.data.options[i].thumb) ? this.data.goods.thumb : this.data.options[i].thumb, //设置图片
              popStock: this.data.options[i].stock, //设置库存
              optionsMaxCount: this.data.options[i].stock//库存最大数 用于切换更改买家购买数量
            });
            optionsId = this.data.options[i].id; //设置规格ID，用于生成订单

            if (this.data.optionsMaxCount > 0) {
              this.setData({
                popNum: 1,
                goodsCount: 1
              });
            }
            console.log("=================",optionsId);
            this.triggerEvent("sku-selected", optionsId);
            break;
          }
        }
      }
    },
    //处理商品goodsSpecs 并排序 新方法
    setGoodsSpecsBySort(specs) {
      let _specs = specs.split("_"); //先变成数组
      //_specs.sort();//排序
      _specs.sort(function(a, b) {
        return a - b;
      });

      // 在组装回去
      let goodsSpecs = "";
      for (let j = 0; j < _specs.length; j++) {
        goodsSpecs += _specs[j] + "_";
      }
      goodsSpecs = goodsSpecs.substring(0, goodsSpecs.length - 1); //处理"_"

      return goodsSpecs;
    },

    //判断当前购买总量与库存的关系
    getMaxCount() {
      if (specsManage.length == this.data.specs.length) {
        // console.log(optionsMaxCount);
        // console.log(this.goodsCount);
        if (this.data.optionsMaxCount == 0) {
          //库存不足
          this.data.goodsCount = 0;
        }
        if (this.data.goodsCount > this.data.optionsMaxCount) {
          this.data.goodsCount = this.data.optionsMaxCount;
        }
        this.setData({
          goodsCount: this.data.goodsCount
        });
      }
    },
    close() {
      this.setData({
        show: false
      });
    },

    initSkuIMG(){}
  }
});
