package com.jwipc.sys.client.impl;

import cn.hutool.core.lang.Pair;
import com.jwipc.sys.client.EmailSendClient;
import com.jwipc.sys.client.dto.*;
import com.jwipc.sys.logic.EmailSendLogicLogic;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * <p> </p>
 *
 * @author ZhangJie
 * @version 1.0
 * @since JDK 1.8
 */
@Service
@RequiredArgsConstructor
public class EmailSendClientImpl implements EmailSendClient {
    private final EmailSendLogicLogic emailSendLogicLogic;

    /**
     * 异步发送发送邮件
     *
     * @param emailSendDTO
     */
    public void async(EmailSendDTO emailSendDTO) {
        if (emailSendDTO instanceof EmailTmpSingleSendDTO) {
            EmailTmpSingleSendDTO a = (EmailTmpSingleSendDTO) emailSendDTO;
            emailSendLogicLogic.asynchSend(a.getReceiver(), a.getTitle(), a.getTemplateCode(), a.getParams(),
                    a.getSender(), a.getFileIds());
        }else if (emailSendDTO instanceof EmailTmpSendDTO) {
            EmailTmpSendDTO a = (EmailTmpSendDTO) emailSendDTO;
            emailSendLogicLogic.asynchSend(a.getReceiver(), a.getTitle(), a.getTemplateCode(), a.getParams(),
                    a.getSender(), a.getFileIds());
        } else if (emailSendDTO instanceof EmailTxtSingleSendDTO) {
            EmailTxtSingleSendDTO a = (EmailTxtSingleSendDTO) emailSendDTO;
            emailSendLogicLogic.asynchSend(a.getReceiver(), a.getTitle(), a.getContent(), a.getSender(),
                    a.getFileIds());
        } else if (emailSendDTO instanceof EmailTxtSendDTO) {
            EmailTxtSendDTO a = (EmailTxtSendDTO) emailSendDTO;
            emailSendLogicLogic.asynchSend(a.getReceiver(), a.getTitle(), a.getContent(), a.getSender(),
                    a.getFileIds());
        }
    }

    /**
     * 同步单个模板发送
     *
     * @param emailTmpSendDTO
     * @return
     */
    public Pair<Boolean, String> syncSingleTemplateSend(EmailTmpSingleSendDTO emailTmpSendDTO) {
        return emailSendLogicLogic.syncSend(emailTmpSendDTO.getReceiver(), emailTmpSendDTO.getTitle(),
                emailTmpSendDTO.getTemplateCode(), emailTmpSendDTO.getParams(),
                emailTmpSendDTO.getSender(), emailTmpSendDTO.getFileIds());
    }

    /**
     * 同步单个模板发送
     *
     * @param emailTmpSendDTO
     * @return
     */
    public Pair<Boolean, String> syncSingleTxtSend(EmailTxtSingleSendDTO emailTmpSendDTO) {
        return emailSendLogicLogic.send(emailTmpSendDTO.getTitle(),
                emailTmpSendDTO.getContent(), emailTmpSendDTO.getFileIds(), emailTmpSendDTO.getSender(),
                emailTmpSendDTO.getReceiver());
    }

    /**
     * 同步多个接收人-发送
     *
     * @param emailTxtSendDTO
     * @return
     */
    public Pair<Boolean, Map<String, String>> syncMultipleTxtSend(EmailTxtSendDTO emailTxtSendDTO) {
        return emailSendLogicLogic.syncSend(emailTxtSendDTO.getReceiver(), emailTxtSendDTO.getTitle(),
                emailTxtSendDTO.getContent(),
                emailTxtSendDTO.getSender(), emailTxtSendDTO.getFileIds());
    }

}
