
package com.tmerclub.cloud.user.service;

import com.tmerclub.cloud.api.coupon.vo.CouponDataVO;
import com.tmerclub.cloud.api.user.vo.UserApiVO;
import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.user.dto.CostPerPopupDTO;
import com.tmerclub.cloud.user.model.CostPerPopup;
import com.tmerclub.cloud.user.vo.CostPerPopupVO;

import java.util.List;

/**
 * 弹窗广告
 * @author TRACK
 */
public interface CostPerPopupService {

    /**
     * 分页获取弹窗广告列表
     * @param pageDTO 分页参数
     * @param costPerPopupDTO 查询参数
     * @return 弹窗广告列表分页数据
     */
    PageVO<CostPerPopupVO> page(PageDTO pageDTO, CostPerPopupDTO costPerPopupDTO);

    /**
     * 获取当前可以推送的商家弹窗
     * @param isShopCustomer
     * @param pageType
     * @param spuId
     * @param shopId
     * @param userId
     * @param uuid
     * @return
     */
    CostPerPopup getShopPopupByCondition(Integer isShopCustomer, Integer pageType, Long spuId, Long shopId, Long userId, Long uuid);

    /**
     * 获取当前可以推送的平台弹窗
     * @param user
     * @param pageType
     * @param uuid
     * @return
     */
    CostPerPopup getSysPopupByCondition(UserApiVO user, Integer pageType, Long uuid);

    /**
     * 根据弹窗广告id获取弹窗广告
     * @param popupId 弹窗广告id
     * @return 弹窗广告
     */
    CostPerPopupVO getByPopupId(Long popupId);

    /**
     * 组装数据
     * @param costPerPopupVO
     */
    void handleInfo(CostPerPopupVO costPerPopupVO);

    /**
     * 保存弹窗广告
     * @param costPerPopup 弹窗广告
     */
    void save(CostPerPopup costPerPopup);

    /**
     * 更新弹窗广告
     * @param costPerPopup 弹窗广告
     */
    void update(CostPerPopup costPerPopup);

    /**
     * 根据弹窗广告id删除弹窗广告
     * @param popupId 弹窗广告id
     */
    void deleteById(Long popupId);

    /**
     * 根据弹窗广告id失效弹窗广告
     * @param popupId 弹窗广告id
     */
    void invalid(Long popupId);

    /**
     * 根据参数获取对应列表
     * @param costPerPopup 参数
     * @return 列表
     */
    List<CostPerPopupVO> listByParam( CostPerPopup costPerPopup);

    /**
     * 投放弹窗广告
     * @return
     */
    List<Long> putOnAdvertise();

    /**
     * 结束弹窗广告
     * @return
     */
    List<Long> endAdvertise();

    /**
     * 删除弹窗广告商品关联
     * @param relateId 商品id或者等级id
     * @param shopId
     */
    void deletePopupByRelate(Long relateId, Long shopId);

    /**
     * 批量删除缓存
     * @param popupIds
     */
    void removeCacheBatch(List<Long> popupIds);

    /**
     * 获取重复周数
     * @param costPerPopup
     * @param dbCostPerPopup
     * @return
     */
    List<String> getDuplicateList(CostPerPopup costPerPopup, CostPerPopupVO dbCostPerPopup);

    /**
     * 删除关联页面
     * @param linkId
     * @param shopId
     * @param type
     * @param categoryIds
     */
    void deleteLink(Long linkId, Long shopId, String type, List<Long> categoryIds);

    /**
     * 下架商家
     * @param shopIds
     */
    void offlineShop(List<Long> shopIds);

    /**
     * 批量下架优惠券
     * @param couponList
     */
    void deleteLinkBatch(List<CouponDataVO> couponList);
}
