package cn.iocoder.yudao.module.member.service.storeshoppingcart;

import cn.hutool.core.collection.CollectionUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.admin.storeshoppingcart.vo.StoreShoppingCartPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.storeshoppingcart.vo.StoreShoppingCartSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.storeshoppingcart.StoreShoppingCartDO;
import cn.iocoder.yudao.module.member.dal.mysql.storeshoppingcart.StoreShoppingCartMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.util.List;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.STORE_SHOPPING_CART_NOT_EXISTS;

/**
 * 小程序商品购物车 Service 实现类
 *
 * @author 管理员
 */
@Service
@Validated
public class StoreShoppingCartServiceImpl implements StoreShoppingCartService {

    @Resource
    private StoreShoppingCartMapper storeShoppingCartMapper;

    @Override
    public Long createStoreShoppingCart(StoreShoppingCartSaveReqVO createReqVO) {
        // 插入
        Long id ;


        List<StoreShoppingCartDO> storeShoppingCartDOS = storeShoppingCartMapper.selectList(Wrappers.<StoreShoppingCartDO>lambdaQuery()
                .eq(StoreShoppingCartDO::getUserId, createReqVO.getUserId())
                .eq(StoreShoppingCartDO::getCarteenId, createReqVO.getCarteenId())
                .eq(StoreShoppingCartDO::getGoodsId,createReqVO.getGoodsId()));

        if(CollectionUtil.isNotEmpty(storeShoppingCartDOS)){
            StoreShoppingCartDO storeShoppingCartDO = storeShoppingCartDOS.get(0);
            if(createReqVO.getNumber() == 0){
                deleteStoreShoppingCart(storeShoppingCartDO.getId());
                return storeShoppingCartDO.getId();
            }
            storeShoppingCartDO.setNumber(createReqVO.getNumber());
            storeShoppingCartMapper.updateById(storeShoppingCartDO);
            id = storeShoppingCartDO.getId();
        }else {
            StoreShoppingCartDO storeShoppingCart = BeanUtils.toBean(createReqVO, StoreShoppingCartDO.class);
            storeShoppingCartMapper.insert(storeShoppingCart);
            id = storeShoppingCart.getId();
        }
        // 返回
        return id;
    }

    @Override
    public void updateStoreShoppingCart(StoreShoppingCartSaveReqVO updateReqVO) {
        // 校验存在
        validateStoreShoppingCartExists(updateReqVO.getId());
        // 更新
        StoreShoppingCartDO updateObj = BeanUtils.toBean(updateReqVO, StoreShoppingCartDO.class);
        storeShoppingCartMapper.updateById(updateObj);
    }

    @Override
    public void deleteStoreShoppingCart(Long id) {
        // 校验存在
        validateStoreShoppingCartExists(id);
        // 删除
        storeShoppingCartMapper.deleteById(id);
    }

    private void validateStoreShoppingCartExists(Long id) {
        if (storeShoppingCartMapper.selectById(id) == null) {
            throw exception(STORE_SHOPPING_CART_NOT_EXISTS);
        }
    }

    @Override
    public StoreShoppingCartDO getStoreShoppingCart(Long id) {
        return storeShoppingCartMapper.selectById(id);
    }

    @Override
    public PageResult<StoreShoppingCartDO> getStoreShoppingCartPage(StoreShoppingCartPageReqVO pageReqVO) {
        return storeShoppingCartMapper.selectPage(pageReqVO);
    }

    @Override
    public void deleteBatch(List<Long> ids) {
        storeShoppingCartMapper.delete(Wrappers.<StoreShoppingCartDO>lambdaQuery()
                .in(StoreShoppingCartDO::getId,ids));
    }
}