package com.ym.mec.biz.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ym.mec.biz.dal.dao.TempLittleArtistTrainingCampDao;
import com.ym.mec.biz.dal.dto.TempLittleArtistTrainingCampDto;
import com.ym.mec.biz.dal.entity.ImGroup;
import com.ym.mec.biz.dal.entity.TempLittleArtistTrainingCamp;
import com.ym.mec.biz.dal.vo.TempCampUserTrainingDetailVo;
import com.ym.mec.biz.dal.vo.TempCampUserTrainingPlayTimeVo;
import com.ym.mec.biz.dal.vo.TempCampUserVo;
import com.ym.mec.biz.dal.vo.TempUserTrainingTimeDetailVo;
import com.ym.mec.common.page.PageInfo;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 小小艺术家训练营活动(TempLittleArtistTrainingCamp)表服务接口
 *
 * @author hgw
 * @since 2022-05-17 20:56:22
 */
public interface TempLittleArtistTrainingCampService extends IService<TempLittleArtistTrainingCamp> {

    TempLittleArtistTrainingCampDao getDao();

    /**
     * 新建训练营
     */
    void add(TempLittleArtistTrainingCampDto dto);

    /**
     * 修改训练营
     */
    void update(TempLittleArtistTrainingCampDto dto);

    /**
     * 删除训练营
     */
    void delete(Integer id);

    /**
     * 分页查询-训练营列表
     *
     * @param param 条件
     *              <p> - row 条数
     *              <p> - page 页数
     *              <p> - name 训练营标题-模糊搜索
     *              <p> - state 筹备中 READY,报名中 APPLY,未开始 NOT_START,进行中 ING,已结束 END
     *              <p> - applyStartDate 申请报名登记开始日期-年月日
     *              <p> - applyEndDate 申请报名登记结束日期-年月日
     *              <p> - trainStartDate 训练开始日期-年月日
     *              <p> - trainEndDate 训练结束日期-年月日
     */
    PageInfo<TempLittleArtistTrainingCamp> queryPageTrainingCamp(Map<String, Object> param);

    /**
     * 参与名单
     *
     * @param param 条件
     *              <p> - row 条数
     *              <p> - page 页数
     *              <p> - state 状态：未报名NOT_APPLY ，已报名 APPLY
     *              <p> - search 学员姓名/手机号/编号
     */
    PageInfo<TempCampUserVo> queryPageTrainingCampUser(Map<String, Object> param);

    /**
     * 查询指定学生-训练营每日训练时长
     *
     * @param param 参数
     *              <p> - userId 用户id
     */
    List<TempUserTrainingTimeDetailVo> queryUserTrainingTime(Map<String, Object> param);

    /**
     * 分页查询-训练营详情
     *
     * @param param 条件
     *              <p> - row 条数
     *              <p> - page 页数
     *              <p> - imGroupId  所在群组Id
     *              <p> - search 学员姓名/手机号/编号
     */
    PageInfo<TempCampUserTrainingDetailVo> queryUserTrainingDetail(Map<String, Object> param);

    /**
     * 根据群组Id查询群组信息
     *
     * @param imGroupIds 群组id，多个用逗号隔开
     */
    List<ImGroup> queryCampImGroup(String imGroupIds);

    /**
     * 查询训练营周期表
     *
     * @return result：
     * <p>user 学员信息
     * <p>campList 训练营信息
     */
    Map<String, Object> queryCampCycle();

    /**
     * 定时任务-修改训练营状态
     */
    void checkCampState();

    void studentGrouping(Date now);

    /**
     * 每天早上8点执行-提醒当天开启训练营并已分群的用户开始训练
     * <p>您已加入小小艺术家训练营{群组标题}，及时查看群聊消息完成老师布置的任务哦
     */
    void pushStartTrain();

    /**
     * 云教练训练是否达标
     */
    TempCampUserTrainingPlayTimeVo queryUserTrainingPlayTime();

    /**
     * 导出小小训练营想详情
     */
    void exportUserTrainingDetail(Map<String, Object> param, HttpServletResponse response) throws IOException;
}


