import type { EmailMessage, EmailTemplate } from '../domain/notification.js';
import type { EmailProvider } from '../domain/ports.js';

const SUBJECTS: Record<EmailTemplate, string> = {
  account_created: '¡Bienvenido a Mercado de Vida!',
  order_confirmation: 'Tu pedido ha sido confirmado',
  payment_failed: 'Hubo un problema con tu pago',
  order_shipped: 'Tu pedido ha sido enviado',
};

const BODIES: Record<EmailTemplate, string> = {
  account_created:
    'Tu cuenta en Mercado de Vida se ha creado. Ya puedes iniciar sesión y empezar a comprar.',
  order_confirmation: 'Hemos recibido tu pago y estamos preparando tu pedido.',
  payment_failed: 'No pudimos procesar tu pago. Por favor, intenta de nuevo.',
  order_shipped: 'Tu pedido está en camino. Recibirás los datos de seguimiento pronto.',
};

/** Logging email provider for v1: writes to destination stream; swap with real adapter later. */
export class LoggingEmailProvider implements EmailProvider {
  constructor(private readonly log: (line: string) => void = () => undefined) {}

  async send(message: EmailMessage): Promise<void> {
    const line = JSON.stringify({
      provider: 'log',
      template: message.template,
      recipient: message.recipient,
      subject: message.subject || SUBJECTS[message.template],
      body: message.body || BODIES[message.template],
      eventId: message.eventId,
    });
    this.log(line);
  }
}
