package com.yd.csf.api.handler;

import com.alibaba.fastjson.JSON;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.yd.csf.service.model.CalmTask;
import com.yd.csf.service.service.ICalmTaskService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
 * 邮件发送任务处理器 - XXL-Job定时任务执行器
 * 使用@XxlJob注解方式
 */
@Component
@Slf4j
public class ExpectedFortuneJobHandler {

    @Autowired
    private ICalmTaskService iCalmTaskService;

    /**
     * XXL-Job任务执行入口方法
     */
    @XxlJob("calmSendJobHandler")
    public void execute() throws Exception {
        //主任务发送时间
        LocalDateTime taskSendTime = LocalDateTime.now();
        // 从XXL-Job参数中获取任务ID
        String param = XxlJobHelper.getJobParam();
        // 记录任务开始日志
        log.info("开始执行邮件发送任务，参数: {}", param);

        // 解析任务参数（参数为保单冷静期任务业务ID）
        String taskBizId = param;
        // 根据保单冷静期任务业务ID查询冷静期任务信息
        CalmTask calmTask = iCalmTaskService.queryOne(taskBizId);
        log.info("根据保单冷静期任务ID查询冷静期任务信息: {}: " + JSON.toJSONString(calmTask));

        // 检查保单冷静期任务是否存在
        if (Objects.isNull(calmTask)) {
            // 记录错误并返回
            XxlJobHelper.log("保单冷静期任务不存在: " + taskBizId);
            XxlJobHelper.handleFail("保单冷静期任务不存在");
            return;
        }

        // 更新任务状态为执行中
        calmTask.setExecutionStatus("1");
        iCalmTaskService.saveOrUpdate(calmTask);

        try {
            //更新

        } catch (Exception e) {
            // 任务执行过程中发生异常
            log.error("保单冷静期任务执行异常", e);
            // 更新任务状态为执行异常
            calmTask.setExecutionStatus("3");
            iCalmTaskService.saveOrUpdate(calmTask);
            // 返回任务执行异常信息
            XxlJobHelper.handleFail("任务执行异常: " + e.getMessage());
        }
    }

}