namespace GestionIntegral.Api.Services.Comunicaciones
{
public interface IEmailService
{
///
/// Envía un correo electrónico a un único destinatario, con la posibilidad de adjuntar un archivo.
/// Este método también registra automáticamente el resultado del envío en la base de datos.
///
/// La dirección de correo del destinatario.
/// El nombre del destinatario.
/// El asunto del correo.
/// El contenido del correo en formato HTML.
/// Los bytes del archivo a adjuntar (opcional).
/// El nombre del archivo adjunto (requerido si se provee attachment).
/// Identificador del proceso que dispara el email (ej. "EnvioManualPDF"). Para logging.
/// ID de la entidad relacionada (ej. "Factura-59"). Para logging.
/// ID del usuario que inició la acción (si aplica). Para logging.
Task EnviarEmailAsync(
string destinatarioEmail,
string destinatarioNombre,
string asunto,
string cuerpoHtml,
byte[]? attachment = null,
string? attachmentName = null,
string? origen = null,
string? referenciaId = null,
int? idUsuarioDisparo = null);
///
/// Envía un correo electrónico a un único destinatario, con la posibilidad de adjuntar múltiples archivos.
/// Este método también registra automáticamente el resultado del envío en la base de datos.
///
/// La dirección de correo del destinatario.
/// El nombre del destinatario.
/// El asunto del correo.
/// El contenido del correo en formato HTML.
/// Una lista de tuplas que contienen los bytes y el nombre de cada archivo a adjuntar.
/// Identificador del proceso que dispara el email (ej. "FacturacionMensual"). Para logging.
/// ID de la entidad relacionada (ej. "Suscriptor-3"). Para logging.
/// ID del usuario que inició la acción (si aplica). Para logging.
Task EnviarEmailConsolidadoAsync(
string destinatarioEmail,
string destinatarioNombre,
string asunto,
string cuerpoHtml,
List<(byte[] content, string name)> adjuntos,
string? origen = null,
string? referenciaId = null,
int? idUsuarioDisparo = null);
}
}