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

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);
    }

    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);
        SkuVo skuVo = new SkuVo();
        if (sku != null) {
            skuVo = skuMapper.getBySkuId(sku.getSkuId());
            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);
    }
}
