import { NewsletterCampaign, ProductItem } from '@/types/newsletter'; import { SUPABASE_ASSETS_BASE } from './defaultCampaign'; export function renderEmailHtml(campaign: NewsletterCampaign): string { const renderedModules = campaign.modules.map((m) => renderModule(m, campaign)).join('\n'); return ` ${escapeHtml(campaign.title)}
${escapeHtml(campaign.preheader || '')}
͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌ ͏ ‌
`; } export function renderSingleModuleHtml(m: any, campaign: NewsletterCampaign): string { return renderModule(m, campaign); } function renderModule(m: any, campaign: NewsletterCampaign): string { switch (m.type) { case 'announcement': return `
`; case 'header': const rawNav = m.data.navLinks && m.data.navLinks.length > 0 ? m.data.navLinks : [ { label: 'Letáky', url: 'https://www.coop.sk/sk/letaky', variant: 'outline' }, { label: 'COOP Klub', url: 'https://www.coopklub.sk', variant: 'filled' } ]; const navLinks = rawNav.map((link: any) => { if (link.variant === 'filled') { return `${escapeHtml(link.label || 'Odkaz')}`; } return `${escapeHtml(link.label || 'Odkaz')}`; }).join('\n'); return `
 
`; case 'banner': return ` ${m.data.title || m.data.description || m.data.buttonText ? ` ` : ''}
 
`; case 'products_grid': const globalValidity = m.data.globalValidity || ''; const products: ProductItem[] = m.data.products || []; const cardBg = m.data.cardBgColor || '#feeaea'; const cardBorder = m.data.cardBorderColor || '#f5d4d4'; const badgeHdrBg = m.data.badgeHeaderBg || '#fefefe'; const badgeHdrColor = m.data.badgeHeaderColor || '#000000'; const badgePrcBg = m.data.badgePriceBg || '#e2001a'; const badgePrcColor = m.data.badgePriceColor || '#fefefe'; const badgeCustomTxt = m.data.badgeHeaderCustomText || null; const rows: ProductItem[][] = []; for (let i = 0; i < products.length; i += 2) { rows.push(products.slice(i, i + 2)); } const rowsHtml = rows.map((row) => ` ${row.map((p, idx) => ` `).join('\n')} ${row.length === 1 ? '' : ''}
${renderExactProductCard(p, globalValidity, cardBg, cardBorder, badgeHdrBg, badgeHdrColor, badgePrcBg, badgePrcColor, badgeCustomTxt)}
`).join('\n'); return ` ${m.data.sectionTitle ? ` ` : ''}

${escapeHtml(m.data.sectionTitle)}

${rowsHtml}
`; case 'loyalty_club': if (m.data.enabled === false) { return ''; } const lProducts = m.data.products || []; return `

${escapeHtml(m.data.sectionTitle || 'Vernostné zľavy')}

${lProducts.map((p: any, idx: number) => ` `).join('\n')}
${renderExactLoyaltyCard(p, m.data.globalValidity || '2. 5. – 15. 5. 2026')}
 
`; case 'articles_row': const it1 = m.data.item1; const it2 = m.data.item2; // Ak ide o letáky if (it1?.btnText) { return `
${escapeHtml(it1.title)}

${escapeHtml(it1.title)}

${escapeHtml(it2.title)}

${escapeHtml(it2.title)}

 
`; } // Inak články / recepty return `
Recepty

${it1.title}

Časopis Jednota

${it2.title}

 
`; case 'footer': return ` `; default: return ''; } } function renderExactProductCard( p: ProductItem, globalValidity: string, cardBg: string, cardBorder: string, badgeHdrBg: string, badgeHdrColor: string, badgePrcBg: string, badgePrcColor: string, badgeCustomTxt: string | null ): string { const validity = p.validityOverride || globalValidity; const storesHtml = ` ${p.stores?.potraviny ? `` : ''} ${p.stores?.supermarket ? `` : ''} ${p.stores?.tempo ? `` : ''}
P
S
T
`; return ` `; } function renderExactLoyaltyCard(p: any, validity: string): string { const cardValidity = p.validityOverride || validity; const storesHtml = ` ${p.stores?.potraviny ? `` : ''} ${p.stores?.supermarket ? `` : ''} ${p.stores?.tempo ? `` : ''}
P
S
T
`; return ` `; } function escapeHtml(str: string): string { if (!str) return ''; return String(str) .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"') .replace(/'/g, '''); }