using System.Threading.Tasks;
using NPP.SmartSchedue.Api.Contracts.Services.Notification.Input;
using NPP.SmartSchedue.Api.Contracts.Services.Notification.Output;

namespace NPP.SmartSchedue.Api.Contracts.Services.Notification;

/// <summary>
/// 邮件通知服务接口
/// 决策点1：基础通知方式 - 邮件通知
/// </summary>
public interface IEmailNotificationService
{
    /// <summary>
    /// 发送单个邮件
    /// </summary>
    Task<SendEmailOutput> SendEmailAsync(SendEmailInput input);

    /// <summary>
    /// 批量发送邮件
    /// </summary>
    Task<BatchSendEmailOutput> BatchSendEmailAsync(BatchSendEmailInput input);

    /// <summary>
    /// 个性化批量发送邮件
    /// </summary>
    Task<BatchSendEmailOutput> BatchSendPersonalizedEmailAsync(BatchSendPersonalizedEmailInput input);

    /// <summary>
    /// 使用模板发送邮件
    /// </summary>
    Task<SendEmailOutput> SendEmailByTemplateAsync(SendEmailByTemplateInput input);

    /// <summary>
    /// 验证邮箱地址格式
    /// </summary>
    Task<bool> IsValidEmailAsync(string email);

    /// <summary>
    /// 检查邮件服务器连接状态
    /// </summary>
    Task<EmailServerStatusOutput> CheckEmailServerStatusAsync();
}