export interface SequenceTemplateVars {
  firstName: string
  lastName: string
  email: string
  tenantName: string
  tenantSlug: string
}

const HTML_ESCAPE_MAP: Record<string, string> = {
  '&': '&amp;',
  '<': '&lt;',
  '>': '&gt;',
  '"': '&quot;',
  "'": '&#39;',
}

function escapeHtml(value: string): string {
  return value.replace(/[&<>"']/g, (char) => HTML_ESCAPE_MAP[char] ?? char)
}

export function renderTemplate(html: string, vars: SequenceTemplateVars): string {
  return html.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g, (_match, rawKey: string) => {
    const key = rawKey as keyof SequenceTemplateVars
    const value = vars[key]
    if (typeof value !== 'string') {
      return ''
    }
    return escapeHtml(value)
  })
}
