package com.fzm.mall.server.front.goods.service.impl;

import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fzm.mall.server.front.goods.model.Sku;
import com.fzm.mall.server.front.goods.mapper.SkuMapper;
import com.fzm.mall.server.front.goods.model.SkuProp;
import com.fzm.mall.server.front.goods.model.vo.SkuVo;
import com.fzm.mall.server.front.goods.service.ISkuPropService;
import com.fzm.mall.server.front.goods.service.ISkuService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fzm.mall.server.front.order.model.vo.MerchantGoodsVo;
import com.fzm.mall.server.front.order.model.vo.OrderSkuVo;
import com.fzm.mall.server.front.order.model.vo.OrderVo;
import com.fzm.mall.server.front.order.model.vo.ShopInfoVo;
import io.netty.util.internal.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 商品规格表 服务实现类
 * </p>
 *
 * @author fzm
 * @since 2021-03-09
 */
@Service
public class SkuServiceImpl extends ServiceImpl<SkuMapper, Sku> implements ISkuService {

    @Autowired
    private SkuMapper skuMapper;

    @Autowired
    private ISkuPropService skuPropService;

    @Override
    public List<SkuVo> getByGoodsId(String goodsId) {
        return skuMapper.getByGoodsIs(goodsId);
    }

    @Override
    public String getGoodsIdByskuId(String skuId) {
        return skuMapper.getGoodsIdByskuId(skuId);
    }

    @Override
    public SkuVo getBySkuId(String skuId) {
        SkuVo skuVo = skuMapper.getBySkuId(skuId);
        List<SkuProp> list = skuPropService.getBySkuId(skuVo.getSkuId());
        skuVo.setSkuProps(list);
        return skuVo;
    }

    @Override
    public String getSidBySkuId(String skuId) {
        return skuMapper.getSidBySkuId(skuId);
    }

    @Override
    public Boolean checkOrder(OrderVo orderVo) {
        List<MerchantGoodsVo> merchantGoodsVos = orderVo.getMerchantGoodsVos();
        for (MerchantGoodsVo merchantGoodsVo : merchantGoodsVos) {
            String merchantId = merchantGoodsVo.getMerchantId();
            List<OrderSkuVo> orderSkuVos = merchantGoodsVo.getOrderSkuVos();
            for (OrderSkuVo orderSkuVo : orderSkuVos) {
                boolean b = checkMerchantIdAndSkuId(merchantId, orderSkuVo.getSkuId());
                if (!b) {
                    return false;
                }
            }
        }
        return true;
    }

    @Override
    public Long getTrueCoin(String coin) {
        return skuMapper.getTrueCoin(coin);
    }

    @Override
    public Long getTokenId(String skuId) {
        return skuMapper.getTokenId(skuId);
    }

    @Override
    public String getSerialNo(String tokenId) {
        return skuMapper.getSerialNo(tokenId);
    }

    @Override
    public void updateSerialNo(String toJSONString,String commodityPassId) {
        skuMapper.updateSerialNo(toJSONString,commodityPassId);
    }

    private boolean checkMerchantIdAndSkuId(String merchantId, String skuId) {
        SkuVo skuVo = skuMapper.getBySkuId(skuId);
        if (merchantId.equals(skuVo.getMerchantId())) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public SkuVo querySkuByCoin(String coin) {
        QueryWrapper<Sku> qw = new QueryWrapper<>();
        if (StringUtil.isNullOrEmpty(coin)) {
            return null;
        }
        qw.eq("coin_name", coin);
        Sku sku = getOne(qw);
        if (sku == null) {
            return null;
        }
        SkuVo skuVo = skuMapper.getBySkuId(sku.getSkuId());
        if (skuVo == null) {
            return null;
        }
        List<SkuProp> list = skuPropService.getBySkuId(skuVo.getSkuId());
        skuVo.setSkuProps(list);
        return skuVo;
    }

    @Override
    public ShopInfoVo getShopInfoVo(String skuId) {
        return skuMapper.getShopInfoVo(skuId);
    }

    @Override
    public String getExpressName(String returnExpressName) {
        return skuMapper.getExpressName(returnExpressName);
    }
}
