package com.qmth.distributed.print.business.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qmth.distributed.print.business.entity.BasicMessage;
import com.qmth.distributed.print.business.entity.ExamTask;
import com.qmth.distributed.print.business.enums.MessageEnum;
import com.qmth.teachcloud.common.bean.params.ApproveUserResult;
import com.qmth.teachcloud.common.entity.SysUser;
import com.qmth.teachcloud.common.enums.EnumResult;

import java.util.List;

/**
 * @Description: 短信消息发送
 * @Author: CaoZixuan
 * @Date: 2021-04-28
 */
public interface BasicMessageService extends IService<BasicMessage> {

    /**
     * 命题任务审核消息处理
     *
     * @param examTaskIdList 命题任务主键集合
     * @param messageType    消息类型枚举
     * @param sysUser        发送信息的用户
     */
    void noticeOfExamTaskAudit(List<Long> examTaskIdList, MessageEnum messageType, SysUser sysUser);

    /**
     * 发送给命题老师-命题待办提醒
     *
     * @param examTasks
     */
    void sendNoticeTaskCreate(ExamTask... examTasks);

    /**
     * 发送给考务老师-审核待办提醒、修改审核待办提醒
     *
     * @param examTask
     * @param messageType
     */
    void sendNoticeTaskAuditCreateOrReview(ExamTask examTask, MessageEnum messageType);

    /**
     * 发送到期预警、逾期提醒
     *
     * @param messageType
     * @param userId
     * @param ids
     */
    void sendNoticeExpireOrOverdue(MessageEnum messageType, Long userId, List<String> ids);

    /**
     * 重发失败短信
     */
    void resendSmsTask();

    /**
     * 新流程，发送审核提醒短信
     *
     * @param examTask
     * @param messageType
     */
    void sendNoticeTaskAuditFlow(ExamTask examTask, List<ApproveUserResult> users, MessageEnum messageType);

    /**
     * 发送审核抄送短信
     *
     * @param examTask
     * @param users
     * @param auditUserNames
     * @param messageType
     */
    void sendNoticeAuditCopyUser(ExamTask examTask, List<ApproveUserResult> users, String auditUserNames, MessageEnum messageType);

    /**
     * 发送给命题老师-试卷结构标答上传通知
     *
     * @param paperNumber 试卷编号
     * @param courseCode  课程代码
     * @param userId      命题老师ID
     * @param messageType 短信类型
     * @param sysUser
     */
    void sendNoticeUploadStructure(String paperNumber, String courseCode, String courseName, Long userId, MessageEnum messageType, SysUser sysUser);

    /**
     * 查询
     *
     * @param messageType
     * @param sendStatus
     * @param mobileNumber
     * @param pageNumber
     * @param pageSize
     * @return
     */
    IPage<BasicMessage> listByMessageType(MessageEnum messageType, Boolean sendStatus, String mobileNumber, Integer pageNumber, Integer pageSize);

    /**
     * 查询短信类型
     *
     * @return
     */
    List<EnumResult> listMessageTypes();

    /**
     * 短信失败重发
     *
     * @param id
     */
    void resendSmsTaskById(Long id);
}
