package com.yida.data.school.smart.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yida.data.common.core.entity.constant.FebsConstant;
import com.yida.data.common.core.entity.smart.EduSmartWelcomeGuide;
import com.yida.data.common.core.enums.EnableStatusEnum;
import com.yida.data.school.dto.smart.GuideSaveDTO;
import com.yida.data.school.dto.smart.GuideSelectPageDTO;
import com.yida.data.school.dto.smart.UpdateQrCodeInfoDTO;
import com.yida.data.school.vo.smart.GuideInfoVO;
import com.yida.data.school.vo.smart.GuideSelectPageVO;
import org.springframework.scheduling.annotation.Async;

/**
 * 智慧迎新指南表Service接口
 *
 * @author ZYJ
 * @date 2023-05-15 15:33:18
 */
public interface EduSmartWelcomeGuideService extends IService<EduSmartWelcomeGuide> {

    /**
     * 查询迎新指南列表数据
     *
     * @param dto 迎新指南后台列表请求类
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yida.data.school.vo.smart.GuideSelectPageVO>
     * @author ZYJ
     * @date 2023/5/15 16:56
     */
    IPage<GuideSelectPageVO> listGuidePage(GuideSelectPageDTO dto);

    /**
     * 获取迎新指南详细信息
     *
     * @param guideId 指南id
     * @return com.yida.data.school.vo.smart.GuideInfoVO
     * @author ZYJ
     * @date 2023/5/15 17:36
     */
    GuideInfoVO getGuideInfo(Long guideId);

    /**
     * 保存迎新指南数据
     *
     * @param dto 保存迎新指南请求类
     * @author ZYJ
     * @date 2023/5/15 20:18
     */
    void saveGuide(GuideSaveDTO dto);

    /**
     * 删除指南
     *
     * @param guideId 指南id
     * @author ZYJ
     * @date 2023/5/15 20:36
     */
    void deleteGuide(Long guideId);

    /**
     * 修改指南状态
     *
     * @param guideId      指南id
     * @param enableStatus 状态. 0:未启用, 1:已启用 {@link EnableStatusEnum}
     * @author ZYJ
     * @date 2023/5/15 20:45
     */
    void updateGuideEnableStatus(Long guideId, Integer enableStatus);

    /**
     * 保存指南二维码配置
     *
     * @param dto 保存指南二维码配置请求类
     * @author ZYJ
     * @date 2023/6/13 15:05
     */
    void updateQrCodeInfo(UpdateQrCodeInfoDTO dto);


    @Async(FebsConstant.ASYNC_POOL)
    void uploadStudentAvatarBatch(String file, Long guideId, Long createUserId);
}
