using Microsoft.Extensions.Logging; using MotoresArgentinosV2.Core.Interfaces; using Microsoft.Extensions.Configuration; namespace MotoresArgentinosV2.Infrastructure.Services; public class NotificationService : INotificationService { private readonly IEmailService _emailService; private readonly ILogger _logger; private readonly string _frontendUrl; public NotificationService(IEmailService emailService, ILogger logger, IConfiguration config) { _emailService = emailService; _logger = logger; // Leemos la URL del appsettings o usamos localhost como fallback _frontendUrl = config["AppSettings:FrontendUrl"] ?? "http://localhost:5173"; } private string GetEmailShell(string title, string content) { return $@"

Motores Argentinos

{title}

{content}

Motores Argentinos - La Plata, Buenos Aires, Argentina

"; } public async Task SendChatNotificationEmailAsync(string toEmail, string fromUser, string message, int adId) { string subject = "Tienes un nuevo mensaje - Motores Argentinos"; string content = $@"

Hola,

{fromUser} te ha enviado un mensaje sobre el aviso #{adId}:

""{message}""

Ingresa a tu cuenta para responder.

VER MENSAJES
"; await _emailService.SendEmailAsync(toEmail, subject, GetEmailShell("Nuevo Mensaje", content)); } public async Task SendAdStatusChangedEmailAsync(string toEmail, string adTitle, string status, string? reason = null) { string subject = "Estado de tu aviso - Motores Argentinos"; string color = status.ToUpper() == "APROBADO" ? "#10b981" : "#ef4444"; string content = $@"

Hola,

Te informamos que el estado de tu aviso ""{adTitle}"" ha cambiado a:

{status}
{(string.IsNullOrEmpty(reason) ? "" : $"

Motivo: {reason}

")}

Gracias por confiar en nosotros.

"; await _emailService.SendEmailAsync(toEmail, subject, GetEmailShell("Cambio de Estado", content)); } public async Task SendSecurityAlertEmailAsync(string toEmail, string actionDescription) { string subject = "Alerta de Seguridad - Motores Argentinos"; string content = $@"

¡Alerta de Seguridad!

Te informamos que se ha realizado la siguiente acción crítica en tu cuenta:

Acción: {actionDescription}

Si no fuiste tú, te recomendamos cambiar tu contraseña inmediatamente y contactar a nuestro equipo de soporte.

Atentamente,
Equipo de Seguridad.

"; await _emailService.SendEmailAsync(toEmail, subject, GetEmailShell("Alerta de Seguridad", content)); } public async Task SendExpirationWarningEmailAsync(string toEmail, string userName, string adTitle, DateTime expirationDate) { string subject = "Tu aviso está por vencer - Motores Argentinos"; string content = $@"

Hola {userName},

Te recordamos que tu publicación ""{adTitle}"" finalizará el día {expirationDate:dd/MM/yyyy}.

Para asegurar que tu vehículo siga visible y no pierdas potenciales compradores, te recomendamos renovarlo ahora.

RENOVAR AVISO
"; await _emailService.SendEmailAsync(toEmail, subject, GetEmailShell("Aviso por Vencer", content)); } public async Task SendAdExpiredEmailAsync(string toEmail, string userName, string adTitle) { string subject = "Tu aviso ha finalizado - Motores Argentinos"; string content = $@"

Hola {userName},

Tu aviso ""{adTitle}"" ha llegado al fin de su vigencia y ya no es visible en los listados.

Si aún no vendiste tu vehículo, puedes republicarlo fácilmente desde tu panel de gestión.

REPUBLICAR AHORA
"; await _emailService.SendEmailAsync(toEmail, subject, GetEmailShell("Aviso Finalizado", content)); } public async Task SendWeeklyPerformanceEmailAsync(string toEmail, string userName, string adTitle, int views, int favorites) { string subject = "Resumen semanal de tu aviso - Motores Argentinos"; string content = $@"

Hola {userName},

Aquí tienes el rendimiento de tu aviso ""{adTitle}"" en los últimos 7 días:

👁️ {views} Visitas
{favorites} Favoritos
"; await _emailService.SendEmailAsync(toEmail, subject, GetEmailShell("Rendimiento Semanal", content)); } public async Task SendPaymentReminderEmailAsync(string toEmail, string userName, string adTitle, string link) { string subject = "Finaliza la publicación de tu aviso - Motores Argentinos"; string content = $@"

Hola {userName},

Tu aviso del ""{adTitle}"" está casi listo, pero aún no es visible para los compradores.

Solo falta confirmar el pago para activarlo. ¡No pierdas oportunidades de venta!

FINALIZAR PUBLICACIÓN
"; await _emailService.SendEmailAsync(toEmail, subject, GetEmailShell("Acción Requerida", content)); } public async Task SendPaymentReceiptEmailAsync(string toEmail, string userName, string adTitle, decimal amount, string operationCode) { string subject = "Comprobante de Pago - Motores Argentinos"; string content = $@"

Hola {userName},

Hemos recibido tu pago correctamente. Aquí tienes el detalle de la operación:

Concepto: Publicación Aviso Clasificado

Vehículo: {adTitle}

Operación: {operationCode}

Fecha: {DateTime.Now:dd/MM/yyyy HH:mm}


Total: ${amount:N2}

Tu aviso ha pasado a la etapa de moderación y será activado a la brevedad.

"; await _emailService.SendEmailAsync(toEmail, subject, GetEmailShell("Recibo de Pago", content)); } public async Task SendUnreadMessagesReminderEmailAsync(string toEmail, string userName, int unreadCount) { string subject = "Tienes mensajes sin leer - Motores Argentinos"; string content = $@"

Hola {userName},

Tienes {unreadCount} mensaje{(unreadCount > 1 ? "s" : "")} sin leer en tu bandeja de entrada.

Es importante responder a los interesados o moderadores para mantener la actividad de tu cuenta.

IR A MIS MENSAJES
"; await _emailService.SendEmailAsync(toEmail, subject, GetEmailShell("Mensajes Pendientes", content)); } }