package com.fs.live.service;


import com.fs.common.core.domain.R;
import com.fs.live.domain.LiveLotteryConf;
import com.fs.live.param.LiveLotteryProductSaveParam;
import com.fs.live.param.LotteryPO;
import com.fs.live.vo.LiveLotteryConfVo;
import com.fs.live.vo.LiveLotteryProductVO;
import com.fs.live.vo.LiveUserLotteryRecordVo;

import java.util.List;
import java.util.Set;

/**
 * 直播抽奖配置Service接口
 *
 * @author fs
 * @date 2025-07-17
 */
public interface ILiveLotteryConfService {
    /**
     * 查询直播抽奖配置
     *
     * @param lotteryId 直播抽奖配置主键
     * @return 直播抽奖配置
     */
    LiveLotteryConf selectLiveLotteryConfByLotteryId(Long lotteryId);

    /**
     * 查询直播抽奖配置列表
     *
     * @param liveLotteryConf 直播抽奖配置
     * @return 直播抽奖配置集合
     */
    List<LiveLotteryConf> selectLiveLotteryConfList(LiveLotteryConf liveLotteryConf);

    /**
     * 新增直播抽奖配置
     *
     * @param liveLotteryConf 直播抽奖配置
     * @return 结果
     */
    int insertLiveLotteryConf(LiveLotteryConf liveLotteryConf);

    /**
     * 修改直播抽奖配置
     *
     * @param liveLotteryConf 直播抽奖配置
     * @return 结果
     */
    R updateLiveLotteryConf(LiveLotteryConf liveLotteryConf);

    /**
     * 批量删除直播抽奖配置
     *
     * @param lotteryIds 需要删除的直播抽奖配置主键集合
     * @return 结果
     */
    int deleteLiveLotteryConfByLotteryIds(Long[] lotteryIds);

    /**
     * 删除直播抽奖配置信息
     *
     * @param lotteryId 直播抽奖配置主键
     * @return 结果
     */
    int deleteLiveLotteryConfByLotteryId(Long lotteryId);

    LiveLotteryConf getById(Long lotteryId);

    List<LiveLotteryConf> getByLiveId(Long liveId);

    void create(LiveLotteryConf conf);

    void update(LiveLotteryConf conf);

    void delete(Long lotteryId);

    String startLottery(Long lotteryId, Long userId);

    void saveProducts(LiveLotteryProductSaveParam liveLotteryProducts);

    LiveLotteryProductVO getGoods(Long lotteryId);

    List<LiveLotteryConf> selectByLiveId(Long existLiveId);

    R claimLotteryPacket(LotteryPO lottery);

    List<LiveLotteryConfVo> selectActivedLottery(Long liveId);

    List<LiveLotteryConfVo> selectByLotteryIds(Set<String> range);

    List<LiveLotteryConfVo> selectVoListByLotteryIds(Set<String> range);

    R detail(LotteryPO lottery);

    void finishStatusByLotteryIds(List<Long> ids);

    List<LiveLotteryConf> selectLiveLotteryConfListOn(LiveLotteryConf liveLotteryConf);

    List<LiveUserLotteryRecordVo> myLottery(long l);
}
