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.
        /// ID del lote de envío masivo al que pertenece este correo (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,
            int? idLoteDeEnvio = 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.
        /// ID del lote de envío masivo al que pertenece este correo (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,
            int? idLoteDeEnvio = null);
    }
}