
package com.tmerclub.cloud.product.service;

import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.common.product.vo.GiveawaySpuVO;
import com.tmerclub.cloud.common.product.vo.GiveawayVO;
import com.tmerclub.cloud.common.product.vo.SpuVO;
import com.tmerclub.cloud.product.dto.GiveawaySpuDTO;
import com.tmerclub.cloud.product.model.GiveawaySpu;

import java.util.List;

/**
 * 赠品套装商品项
 *
 * @author tmerclub
 * @date 2022-08-16 11:11:59
 */
public interface GiveawaySpuService {

    /**
     * 分页获取赠品套装商品项列表
     * @param pageDTO 分页参数
     * @return 赠品套装商品项列表分页数据
     */
    PageVO<GiveawaySpuVO> page(PageDTO pageDTO);

    /**
     * 根据商品id获取赠品套装商品项
     *
     * @param spuId 商品id
     * @return 赠品套装商品项
     */
    List<GiveawaySpuVO> getBySpuId(Long spuId);


    /**
     * 分页获取主商品
     * @param pageDTO
     * @param giveawaySpuDTO
     * @return
     */
    PageVO<SpuVO> getMainSpuPage(PageDTO pageDTO, GiveawaySpuDTO giveawaySpuDTO);


    /**
     * 根据赠品主商品id获取赠品套装商品项
     * @param giveawayId
     * @return
     */
    List<GiveawaySpuVO> getByGiveawayId(Long giveawayId);

    /**
     * 根据商品id获取赠品信息[有缓存]
     * @param spuId
     * @return
     */
    GiveawayVO getGiveawayBySpuId(Long spuId);

    /**
     * 保存赠品套装商品项
     * @param giveawaySpu 赠品套装商品项
     */
    void save(GiveawaySpu giveawaySpu);

    /**
     * 批量更新赠品套装商品项
     * @param giveawayId
     * @param status
     * @return
     */
    boolean updateStatus(Long giveawayId, Integer status);

    /**
     * 根据赠品套装商品项id删除赠品套装商品项
     * @param giveawaySpuId 赠品套装商品项id
     */
    void deleteById(Long giveawaySpuId);

    /**
     * 批量保存赠品商品项信息
     * @param giveawaySpuList
     */
    void insertBatch(List<GiveawaySpuDTO> giveawaySpuList);

    /**
     * 批量删除赠品套餐商品项
     * @param giveawaySpuIds
     */
    void batchDeleteByIds(List<Long> giveawaySpuIds);

    /**
     * 失效赠送商品项状态
     *
     * @param giveawayIdList
     */
    void changeGiveawayActivityStatusByGiveawayIdList(List<Long> giveawayIdList);

    /**
     * 根据商品id删除缓存
     * @param spuId
     */
    void removeGiveawayCacheBySupId(Long spuId);

    /**
     * 根据商品id集合删除缓存
     * @param spuIds
     */
    void removeGiveawayCacheBatch(List<Long> spuIds);
}
