package com.bonus.material.warning;

import cn.hutool.json.JSONObject;
import com.ah.sbd.SmsTool;
import com.ah.sbd.utils.param.SmsParam;
import com.alibaba.nacos.common.utils.CollectionUtils;
import com.bonus.common.biz.constant.BmConfigItems;
import com.bonus.common.biz.enums.PurchaseTaskStatusEnum;
import com.bonus.common.biz.enums.RepairInputStatusEnum;
import com.bonus.common.biz.enums.TmTaskTypeEnum;
import com.bonus.material.task.domain.TmTask;
import com.bonus.material.task.service.ITmTaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * 待入库定时任务
 * @Author ma_sh
 * @create 2025/1/13 18:11
 */
@Component
@Slf4j
public class WashHouseScheduledTasks {

    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    @Resource
    private ITmTaskService tmTaskService;

    @Resource
    private ScheduledTaskRegistrar scheduledTaskRegistrar;

    /**
     * 定时任务执行频率，每3天上午9点执行一次
     */
    private String cronExpression = "0 0 9 */3 * ?";

    /**
     * 初始化定时任务
     */
    @PostConstruct
    public void init() {
        cronExpression = getCronFromDatabase();
        updateCronTask();
    }

    /**
     * 更新定时任务
     */
    private void updateCronTask() {
        scheduledTaskRegistrar.getScheduler().schedule(() -> {
            taskWithWashHouse();
        }, new CronTrigger(cronExpression));
    }

    /**
     * 从数据库中获取 cron 表达式
     * @return
     */
    private String getCronFromDatabase() {
        // 这里假设从数据库中获取 cron 表达式
        //return "0/30 * * * * ?";
        return "0 0 9 */2 * ?";
    }

    /**
     * 未入库定时任务
     */
    public void taskWithWashHouse() {
        log.info("开始执行未入库定时推送任务");
        boolean hasNullTask = false;
        TmTask info = new TmTask();
        List<TmTask> list = tmTaskService.selectTmTaskList(info);
        if (CollectionUtils.isNotEmpty(list)) {
            for (TmTask tmTask : list) {
                if (tmTask.getTaskType().equals(TmTaskTypeEnum.TM_TASK_PURCHASE.getTaskTypeId())) {
                    if (tmTask.getTaskStatus().equals(PurchaseTaskStatusEnum.TASK_IN_PROGRESS.getStatus())) {
                        hasNullTask = true;
                        break;
                    }
                } else if (tmTask.getTaskType().equals(TmTaskTypeEnum.TM_TASK_REPAIR_INPUT.getTaskTypeId())) {
                    if (tmTask.getTaskStatus().equals(RepairInputStatusEnum.INPUT_TASK_NO_FINISHED.getStatus())) {
                        hasNullTask = true;
                        break;
                    }
                }
            }
        }
        if (hasNullTask) {
            sendSms("15527030643", "您好！您还有待入库任务需要进行处理，请及时登录系统查看处理，感谢配合！");
        } else {
            log.info("没有待入库的单子");
            System.out.println("没有待入库的单子");
        }
        // 记录任务执行时间
        log.info("待入库定时任务执行时间：" + LocalDateTime.now().format(FORMATTER));
        System.out.println("待入库定时任务执行时间：" + LocalDateTime.now().format(FORMATTER));
    }

    /**
     * 发送短信
     * @param phoneNumber 手机号码
     * @param content 短信内容
     */
    private void sendSms(String phoneNumber, String content) {
        try {
            //String sendResult = SmsUtils.smsToken(phoneNumber, content, "");
            // 省公司短信发送
            JSONObject sendResult = SmsTool.sendSms(new SmsParam(phoneNumber, content), BmConfigItems.ANHUI_COMPANY_SMS_KEY);
            if (sendResult != null) {
                log.info("短信发送成功: {}", sendResult);
            } else {
                log.error("短信发送失败，发送结果为空!");
            }
        } catch (Exception e) {
            log.error("短信发送过程中发生异常", e);
        }
    }
}
