type CapturedMessage = { subject: string; html: string; createdAt: string };
type Mailbox = { runId: string; id: string; recipient: string; messages: CapturedMessage[] };

const mailboxes = new Map<string, Mailbox>();

export function createFactoryMailbox(runId: string, id: string, recipient: string): void {
  mailboxes.set(id, { runId, id, recipient: recipient.toLowerCase(), messages: [] });
}

export function captureFactoryMail(recipient: string, subject: string, html: string): boolean {
  const normalized = recipient.toLowerCase();
  const mailbox = [...mailboxes.values()].find((candidate) => candidate.recipient === normalized);
  if (!mailbox) return false;
  mailbox.messages.push({ subject, html, createdAt: new Date().toISOString() });
  return true;
}

export function readFactoryMailbox(runId: string, id: string): Mailbox | null {
  const mailbox = mailboxes.get(id);
  return mailbox?.runId === runId ? structuredClone(mailbox) : null;
}

export function deleteFactoryMailbox(runId: string, id: string): void {
  if (mailboxes.get(id)?.runId === runId) mailboxes.delete(id);
}
