package com.xinelu.manage.service.batchsendtaskrecordinfo.impl;

import com.xinelu.common.annotation.DataScope;
import com.xinelu.common.enums.BillSourceEnum;
import com.xinelu.common.enums.NodeExecuteStatusEnum;
import com.xinelu.manage.domain.batchsendtaskrecordinfo.BatchSendTaskRecordInfo;
import com.xinelu.manage.domain.scriptInfo.ScriptInfo;
import com.xinelu.manage.mapper.batchsendtaskrecordinfo.BatchSendTaskRecordInfoMapper;
import com.xinelu.manage.mapper.scriptInfo.ScriptInfoMapper;
import com.xinelu.manage.mapper.textmessage.TextMessageMapper;
import com.xinelu.manage.service.batchsendtaskrecordinfo.IBatchSendTaskRecordInfoService;
import com.xinelu.manage.vo.batchsendtaskrecordinfo.BatchSendTaskRecordVo;
import com.xinelu.manage.vo.textmessage.TextMessageVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 批量推送任务记录Service业务层处理
 *
 * @author zh
 * @date 2026-04-26
 */
@Service
public class BatchSendTaskRecordInfoServiceImpl implements IBatchSendTaskRecordInfoService {
    @Resource
    private BatchSendTaskRecordInfoMapper batchSendTaskRecordInfoMapper;
    @Resource
    private ScriptInfoMapper scriptInfoMapper;
    @Resource
    private TextMessageMapper textMessageMapper;

    /**
     * 查询批量推送任务记录
     *
     * @param id 批量推送任务记录主键
     * @return 批量推送任务记录
     */
    @Override
    public BatchSendTaskRecordVo selectBatchSendTaskRecordInfoById(Long id) {
        return batchSendTaskRecordInfoMapper.selectBatchSendTaskRecordVoById(id);
    }

    /**
     * 查询批量推送任务记录列表
     *
     * @param batchSendTaskRecordInfo 批量推送任务记录
     * @return 批量推送任务记录
     */
    @Override
    public List<BatchSendTaskRecordInfo> selectBatchSendTaskRecordInfoList(BatchSendTaskRecordInfo batchSendTaskRecordInfo) {
        List<BatchSendTaskRecordInfo> batchSendTaskRecordInfos = batchSendTaskRecordInfoMapper.selectBatchSendTaskRecordInfoList(batchSendTaskRecordInfo);
        if (CollectionUtils.isEmpty(batchSendTaskRecordInfos)) {
            return new ArrayList<>();
        }
        for (BatchSendTaskRecordInfo sendTaskRecordInfo : batchSendTaskRecordInfos) {
            if (StringUtils.isNotBlank(sendTaskRecordInfo.getNodeExecuteStatus()) && sendTaskRecordInfo.getNodeExecuteStatus().equals(NodeExecuteStatusEnum.EXECUTED.getInfo())) {
                sendTaskRecordInfo.setNodeExecuteStatus(NodeExecuteStatusEnum.EXECUTED.getCode());
            }
            if (StringUtils.isNotBlank(sendTaskRecordInfo.getNodeExecuteStatus()) && sendTaskRecordInfo.getNodeExecuteStatus().equals(NodeExecuteStatusEnum.UNEXECUTED.getInfo())) {
                sendTaskRecordInfo.setNodeExecuteStatus(NodeExecuteStatusEnum.UNEXECUTED.getCode());
            }
            if (StringUtils.isNotBlank(sendTaskRecordInfo.getNodeExecuteStatus()) && sendTaskRecordInfo.getNodeExecuteStatus().equals(NodeExecuteStatusEnum.EXECUTING.getInfo())) {
                sendTaskRecordInfo.setNodeExecuteStatus(NodeExecuteStatusEnum.EXECUTING.getCode());
            }
            if (StringUtils.isNotBlank(sendTaskRecordInfo.getBatchTaskSource()) && sendTaskRecordInfo.getBatchTaskSource().equals(BillSourceEnum.TELEPHONE.getInfo())) {
                sendTaskRecordInfo.setBatchTaskSource(BillSourceEnum.TELEPHONE.getCode());
            }
            if (StringUtils.isNotBlank(sendTaskRecordInfo.getBatchTaskSource()) && sendTaskRecordInfo.getBatchTaskSource().equals(BillSourceEnum.MESSAGE.getInfo())) {
                sendTaskRecordInfo.setBatchTaskSource(BillSourceEnum.MESSAGE.getCode());
            }
        }
        return batchSendTaskRecordInfos;
    }

    /**
     * 新增批量推送任务记录
     *
     * @param batchSendTaskRecordInfo 批量推送任务记录
     * @return 结果
     */
    @Override
    public int insertBatchSendTaskRecordInfo(BatchSendTaskRecordInfo batchSendTaskRecordInfo) {
        batchSendTaskRecordInfo.setCreateTime(LocalDateTime.now());
        return batchSendTaskRecordInfoMapper.insertBatchSendTaskRecordInfo(batchSendTaskRecordInfo);
    }

    /**
     * 修改批量推送任务记录
     *
     * @param batchSendTaskRecordInfo 批量推送任务记录
     * @return 结果
     */
    @Override
    public int updateBatchSendTaskRecordInfo(BatchSendTaskRecordInfo batchSendTaskRecordInfo) {
        return batchSendTaskRecordInfoMapper.updateBatchSendTaskRecordInfo(batchSendTaskRecordInfo);
    }

    /**
     * 批量删除批量推送任务记录
     *
     * @param ids 需要删除的批量推送任务记录主键
     * @return 结果
     */
    @Override
    public int deleteBatchSendTaskRecordInfoByIds(Long[] ids) {
        return batchSendTaskRecordInfoMapper.deleteBatchSendTaskRecordInfoByIds(ids);
    }

    /**
     * 删除批量推送任务记录信息
     *
     * @param id 批量推送任务记录主键
     * @return 结果
     */
    @Override
    public int deleteBatchSendTaskRecordInfoById(Long id) {
        return batchSendTaskRecordInfoMapper.deleteBatchSendTaskRecordInfoById(id);
    }

    /**
     * 获取短信或电话模板
     *
     * @param batchTaskSource 短信或电话
     * @return BatchSendTaskRecordInfo
     */
    @DataScope(agencyAlias = "d")
    @Override
    public List<BatchSendTaskRecordInfo> getTemplate(String batchTaskSource) {
        if (StringUtils.isBlank(batchTaskSource)) {
            return new ArrayList<>();
        }
        List<BatchSendTaskRecordInfo> batchSendTaskRecordInfos = new ArrayList<>();
        if (batchTaskSource.equals(BillSourceEnum.TELEPHONE.getInfo())) {
            List<ScriptInfo> scriptInfos = scriptInfoMapper.selectScriptInfos();
            for (ScriptInfo scriptInfo : scriptInfos) {
                BatchSendTaskRecordInfo batchSendTaskRecordInfo = new BatchSendTaskRecordInfo();
                batchSendTaskRecordInfo.setTemplateId(scriptInfo.getScriptId());
                batchSendTaskRecordInfo.setRobotPublishId(scriptInfo.getRobotPublishId());
                batchSendTaskRecordInfo.setTemplateName(scriptInfo.getScriptName());
                batchSendTaskRecordInfos.add(batchSendTaskRecordInfo);
            }
        }
        if (batchTaskSource.equals(BillSourceEnum.MESSAGE.getInfo())) {
            List<TextMessageVO> textMessageVOS = textMessageMapper.selectTextMessages();
            for (TextMessageVO textMessageVO : textMessageVOS) {
                BatchSendTaskRecordInfo batchSendTaskRecordInfo = new BatchSendTaskRecordInfo();
                batchSendTaskRecordInfo.setTemplateId(textMessageVO.getId().toString());
                batchSendTaskRecordInfo.setRobotPublishId(textMessageVO.getTextMessageId());
                batchSendTaskRecordInfo.setTemplateName(textMessageVO.getTextMessageName());
                batchSendTaskRecordInfos.add(batchSendTaskRecordInfo);
            }
        }
        return batchSendTaskRecordInfos;
    }
}