package com.yushu.system.service;

import java.util.List;
import java.util.Map;

/**
 * 邮件发送Service接口
 * 
 * @author yushu
 * @date 2024-12-13
 */
public interface ISysMailService {
    
    /**
     * 发送简单邮件
     * 
     * @param to 收件人(多个用逗号分隔)
     * @param subject 邮件主题
     * @param content 邮件内容
     * @param isHtml 是否HTML内容
     * @return 是否发送成功
     */
    boolean sendMail(String to, String subject, String content, boolean isHtml);

    /**
     * 使用指定配置发送邮件
     * 
     * @param configId 配置ID
     * @param to 收件人(多个用逗号分隔)
     * @param subject 邮件主题
     * @param content 邮件内容
     * @param isHtml 是否HTML内容
     * @return 是否发送成功
     */
    boolean sendMail(Long configId, String to, String subject, String content, boolean isHtml);

    /**
     * 发送带抄送的邮件
     * 
     * @param configId 配置ID(null使用默认)
     * @param to 收件人(多个用逗号分隔)
     * @param cc 抄送人(多个用逗号分隔)
     * @param bcc 密送人(多个用逗号分隔)
     * @param subject 邮件主题
     * @param content 邮件内容
     * @param isHtml 是否HTML内容
     * @return 是否发送成功
     */
    boolean sendMail(Long configId, String to, String cc, String bcc, String subject, String content, boolean isHtml);

    /**
     * 发送带附件的邮件
     * 
     * @param configId 配置ID(null使用默认)
     * @param to 收件人(多个用逗号分隔)
     * @param subject 邮件主题
     * @param content 邮件内容
     * @param isHtml 是否HTML内容
     * @param attachmentPaths 附件路径列表
     * @return 是否发送成功
     */
    boolean sendMailWithAttachments(Long configId, String to, String subject, String content, boolean isHtml, List<String> attachmentPaths);

    /**
     * 使用模板发送邮件
     * 
     * @param templateCode 模板代码
     * @param to 收件人(多个用逗号分隔)
     * @param variables 模板变量
     * @return 是否发送成功
     */
    boolean sendMailByTemplate(String templateCode, String to, Map<String, Object> variables);

    /**
     * 使用模板发送邮件(指定配置)
     * 
     * @param configId 配置ID
     * @param templateCode 模板代码
     * @param to 收件人(多个用逗号分隔)
     * @param variables 模板变量
     * @return 是否发送成功
     */
    boolean sendMailByTemplate(Long configId, String templateCode, String to, Map<String, Object> variables);

    /**
     * 重新发送失败的邮件
     * 
     * @param logId 日志ID
     * @return 是否发送成功
     */
    boolean resendMail(Long logId);
}
