package com.kxs.system.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kxs.common.core.util.R;
import com.kxs.system.api.dto.kxsapp.camp.CampOpenNumStatDTO;
import com.kxs.system.api.dto.kxsapp.camp.PrizePoolDTO;
import com.kxs.system.api.model.KxsCamp;
import com.kxs.system.api.vo.admin.CampUserExcelVO;
import com.kxs.system.api.vo.kxsapp.camp.CampGetByIdVO;
import com.kxs.system.api.vo.kxsapp.camp.CampPageVO;
import org.springframework.validation.BindingResult;

import java.util.List;

/**
 * 训练营(KxsCamp)表服务接口
 *
 * @author 系统
 * @since 2024-04-08 15:44:02
 */
public interface KxsCampService extends IService<KxsCamp> {

    /**
     * 添加数据
     *
     * @param param 参数
     * @return {@link R}
     */
    R addData(KxsCamp param);

    /**
     * 更新数据
     *
     * @param param 参数
     * @return {@link R}
     */
    R updateData(KxsCamp param);

    /**
     * 导入用户数据
     *
     * @param campUserExcelVOList 用户 Excel
     * @param bindingResult       绑定结果
     * @return {@link R}
     */
    R importUserData(List<CampUserExcelVO> campUserExcelVOList, BindingResult bindingResult);

    /**
     * APP 创客参与训练营列表
     *
     * @param page 页
     * @return {@link IPage}<{@link CampPageVO}>
     */
    IPage<CampPageVO> getByPage(Page<CampPageVO> page);

    /**
     * 详情
     *
     * @param id 训练营ID
     * @return {@link CampGetByIdVO}
     */
    R getByData(Integer id);

    /**
     * 兑换券下单 奖池已刷新
     */
    void prizePoolIsRefreshed(PrizePoolDTO param);

    /**
     * 后台分页 页面
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link KxsCamp}>
     */
    IPage<KxsCamp> getBySysPage(Page<KxsCamp> page, KxsCamp param);


    /**
     * 开机数量统计
     */
    void poweronQuantityStatistics();

    /**
     * 更改状态
     *
     * @param param 参数
     * @return {@link R}
     */
    R changeStatus(KxsCamp param);

    /**
     * 训练营开机数量统计
     *
     * @param param 参数
     */
    void campOpenNumStat(CampOpenNumStatDTO param);
}

