package com.srs.flowable.listener.disciplinary;


import com.srs.common.core.domain.AjaxResult;
import com.srs.common.utils.WeChatUtil;
import com.srs.common.utils.spring.SpringUtils;
import com.srs.flowable.mapper.DisciplinaryMapper;
import com.srs.flowable.mapper.LeaveMapper;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;

/**
 * 根据辅导员的部门id，查询该部门的学务干事人员 知无涯
 */
@Component
@Slf4j

public class XWGSListener implements ExecutionListener {


    @Override
    public void notify(DelegateExecution delegateExecution) {
        DisciplinaryMapper disciplinaryMapper = SpringUtils.getBean(DisciplinaryMapper.class);

        Long deptId = (Long) delegateExecution.getVariable("deptId");

        if (deptId != null) {
            // 步骤 1: 获取审批人的系统ID (userId)  知无涯
            Long userId = disciplinaryMapper.getApprovalByDeptIdAndRoleKey(deptId, "stumanger");
            if (userId != null) {
                // 将审批人ID设置到流程变量中，供后续任务节点使用
                delegateExecution.setVariable("approval", userId);
                // todo 企业微信推送消息
                try {
                    // 步骤 2: 使用 userId 查询对应的企业微信账号 (userName)
                    String userName = disciplinaryMapper.getUserNameByUserId(userId);

                    // 步骤 3: 检查是否成功获取到 userName
                    if (userName != null && !userName.isEmpty()) {
                        WeChatUtil weChatUtil = SpringUtils.getBean(WeChatUtil.class);

                        // 构造包含超链接的消息内容
                        String content = "您有一条新的学生违纪审批任务待处理，<a href='https://zhxg.gxsdxy.cn/wab/#/pages/Approval/index'>请点击前往处理</a>。";

                        // 步骤 4: 使用 userName 作为接收人发送消息
                        weChatUtil.sendTextMessage(userName, content);
                        log.info("已成功向学务干事(userName:{})发送企业微信审批通知。", userName);

                    } else {
                        // 如果找不到userName，记录警告日志，但流程继续
                        log.warn("找到了审批人(userId:{})，但其对应的企业微信账号(userName)为空，无法发送通知。", userId);
                    }
                } catch (Exception e) {
                    // 捕获所有异常，仅记录日志，确保主流程不受影响
                    log.error("向学务干事(userId:{})发送企业微信通知时出现异常，但流程将继续。错误详情: {}", userId, e.getMessage(), e);
                }
            } else {
                throw new RuntimeException("该学院学务干事审批人员未设置");
            }
        } else {
            throw new RuntimeException("未找到部门相关信息");
        }
    }
}
