package com.iformall.service.impl;

import com.iformall.common.IdWorker;
import com.iformall.domain.po.msg.*;
import com.iformall.enums.EnumMsgRecordStatus;
import com.iformall.mapper.*;
import com.iformall.service.WxMsgRecordService;
import com.iformall.utils.JsonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * @author luozukai
 * 业务短信发送实现
 */
@Service
public class WxMsgRecordServiceImpl implements WxMsgRecordService {
    @Autowired
    private WxMsgRecordMapper wxMsgRecordMapper;

    @Override
    public void save(BaseMsg data){
        final IdWorker idWorker = IdWorker.get();
        WxMsgRecord msgRecord = new WxMsgRecord();

        if(data instanceof WxMsgRecord){
            msgRecord = (WxMsgRecord)data;
        }else if(data instanceof WxMsg){
            WxMsg wxMsg = (WxMsg)data;
            msgRecord.setTenantId(wxMsg.getTenantId());
            msgRecord.setMsgType(wxMsg.getMsgType());
            msgRecord.setReceiver(wxMsg.getPhones());
        }else if(data instanceof MailMsg){
            MailMsg wxMsg = (MailMsg)data;
            msgRecord.setTenantId(wxMsg.getTenantId());
            msgRecord.setMsgType(wxMsg.getMsgType());
            msgRecord.setReceiver(JsonUtil.obj2Json(wxMsg.getTo()));
        }else if(data instanceof SmartAppMsg){
            SmartAppMsg wxMsg = (SmartAppMsg)data;
            msgRecord.setTenantId(wxMsg.getTenantId());
            msgRecord.setMsgType(wxMsg.getMsgType());
            msgRecord.setReceiver(wxMsg.getTo());
        }

        msgRecord.setUuid(data.getUuid());
        msgRecord.setId(idWorker.nextId());
        msgRecord.setMsgJson(JsonUtil.obj2Json(data));
        msgRecord.setMsgStatus(EnumMsgRecordStatus.DEFAULT.getCode());
        wxMsgRecordMapper.save(msgRecord);
    }

    @Override
    public List<WxMsgRecord> findList(WxMsgRecord record) {
        return wxMsgRecordMapper.findList(record);
    }

    @Override
    public void update(WxMsgRecord record) {
        wxMsgRecordMapper.updateByBaseMsg(record);
    }
}
