// EN: Email service interface for sending emails
// VI: Interface email service để gửi email

namespace IamService.Infrastructure.Email;

/// <summary>
/// EN: Email service interface for sending various types of emails.
/// VI: Interface email service để gửi các loại email khác nhau.
/// </summary>
public interface IEmailService
{
    /// <summary>
    /// EN: Send a generic email.
    /// VI: Gửi email chung.
    /// </summary>
    Task SendEmailAsync(string to, string subject, string htmlBody, CancellationToken cancellationToken = default);
    
    /// <summary>
    /// EN: Send email verification email with token.
    /// VI: Gửi email xác thực với token.
    /// </summary>
    Task SendVerificationEmailAsync(string email, string token, CancellationToken cancellationToken = default);
    
    /// <summary>
    /// EN: Send 2FA code via email.
    /// VI: Gửi mã 2FA qua email.
    /// </summary>
    Task Send2FACodeAsync(string email, string code, CancellationToken cancellationToken = default);
    
    /// <summary>
    /// EN: Send password reset email.
    /// VI: Gửi email đặt lại mật khẩu.
    /// </summary>
    Task SendPasswordResetEmailAsync(string email, string token, CancellationToken cancellationToken = default);
}
