/**
 * Expense email intake sender validation — S7-004.
 *
 * CF Email Routing delivers to the Worker without a provider HMAC; the strongest
 * available check is matching the From address against active tenant member emails.
 */
import { getActiveMemberEmailsForTenant, type Db } from '@zync/db/queries'

/** Normalize RFC5322 From values (plain or `Name <addr>`) to lowercase email. */
export function normalizeEmailAddress(raw: string): string {
  const trimmed = raw.trim().toLowerCase()
  const angle = trimmed.match(/<([^>]+)>/)
  if (angle?.[1]) return angle[1].trim().toLowerCase()
  return trimmed
}

export async function isExpenseEmailSenderAllowed(
  db: Db,
  tenantId: string,
  senderAddress: string,
): Promise<boolean> {
  const normalized = normalizeEmailAddress(senderAddress)
  if (!normalized || !normalized.includes('@')) return false
  const allowed = await getActiveMemberEmailsForTenant(db, tenantId)
  return allowed.includes(normalized)
}
