package com.fs.sop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fs.common.core.domain.R;
import com.fs.qw.param.SopMsgParam;
import com.fs.qw.result.QwExternalContactByQwResult;
import com.fs.sop.domain.QwSopLogs;
import com.fs.sop.params.GetQwSopLogsByJsApiParam;
import com.fs.sop.params.QwSopLogsParam;
import com.fs.sop.params.SendSopParamDetailsC;
import com.fs.sop.vo.QwSopLogsDoSendListTVO;
import com.fs.sop.vo.QwSopLogsListCVO;

import java.util.List;

/**
 * 企业微信SOP  定时任务Service接口
 *
 * @author fs
 * @date 2024-08-05
 */
public interface IQwSopLogsService extends IService<QwSopLogs>
{
    /**
     * 查询企业微信SOP  定时任务
     *
     * @param id 企业微信SOP  定时任务主键
     * @return 企业微信SOP  定时任务
     */
    public QwSopLogs selectQwSopLogsById(String id);

    /**
     * 查询企业微信SOP  定时任务列表
     *
     * @param QwSopLogs 企业微信SOP  定时任务
     * @return 企业微信SOP  定时任务集合
     */
    public List<QwSopLogs> selectQwSopLogsList(QwSopLogs QwSopLogs);

    /**
    * 获取单条规则 的 执行记录历史
    */
    public List<QwSopLogsListCVO> selectQwSopLogsListBySopId(QwSopLogsParam param);

    /**
     * 新增企业微信SOP  定时任务
     *
     * @param QwSopLogs 企业微信SOP  定时任务
     * @return 结果
     */
    public int insertQwSopLogs(QwSopLogs QwSopLogs);

    /**
     * 修改企业微信SOP  定时任务
     *
     * @param QwSopLogs 企业微信SOP  定时任务
     * @return 结果
     */
    public int updateQwSopLogs(QwSopLogs QwSopLogs);


    /**
     * 批量删除企业微信SOP  定时任务
     *
     * @param ids 需要删除的企业微信SOP  定时任务主键集合
     * @return 结果
     */
    public int editCourseQwSopLogs(String[] ids);

    /**
     * 批量删除企业微信SOP  定时任务
     *
     * @param ids 需要删除的企业微信SOP  定时任务主键集合
     * @return 结果
     */
    public int deleteQwSopLogsByIds(String[] ids);

    /**
     * 删除企业微信SOP  定时任务信息
     *
     * @param id 企业微信SOP  定时任务主键
     * @return 结果
     */
    public int deleteQwSopLogsById(String id);

    /**
    *  检索执行符合条件的定时任务(企业微信)
    */
    public void checkQwSopLogs();


    /**
     * 创建企业群发
     */
    public void createCorpMassSending(String date);
    /**
     *  创建企业群发(按照营期发)
     */
    public void createCorpMassSendingByUserLogs(String taskStartTime,String taskEndTime);

    /**
     *  检索执行符合条件的定时任务的结果回调(企业微信)
     */
    public void qwSopLogsResult();
    public void qwSopLogsResultNew() throws InterruptedException;

    public int updateQwSopLogsByWatchLogType(String id,String remark);

    List<QwSopLogsDoSendListTVO> selectQwSopLogsDoSendList(String qwUserId,String corpId);

    /**
     * 定时更新 待发送中已经算过期了的不能发的消息
     */
    int updateQwSopLogsBySendStatus();

    public int updateQwSopLogsSendType(QwSopLogs qwSopLogs);

    List<QwSopLogs> selectQwSopLogsListVO(SopMsgParam param);

    SendSopParamDetailsC getQwSopLogsByJsApi(GetQwSopLogsByJsApiParam param);

    QwExternalContactByQwResult getExternalContactByAppKey(String appKey);

    R deleteQwSopLogsByJsApi(GetQwSopLogsByJsApiParam param);

    void batchInsertQwSopLogs(List<QwSopLogs> logsToInsert);

    /**
    * 批量处理sop待发送记录中已过期得消息
    */
    List<QwSopLogsDoSendListTVO> expiredMessagesByQwSopLogs();


    void updateBatch(List<QwSopLogs> collect);

    void countQwApiAopLogToken(String dateStr);

    /**
     * 清理标签解绑用户执行记录
     * @param qwSopLogs
     * **/
    void deleteQwSopLogsLabel(QwSopLogs qwSopLogs);

    /**
     * 校验会员是否被管理员拉黑，若是则标记日志为不发送
     */
    void applyBlacklistCheck(QwSopLogs sopLogs);

    /**
     * 批量校验会员拉黑状态
     */
    void applyBlacklistCheck(List<QwSopLogs> sopLogs);

    /**
     * 取消指定会员所有待发送的SOP记录（拉黑时调用）
     */
    void cancelPendingSopLogsByBlacklistedFsUserId(Long fsUserId);
}
