function baseLayout(title, body) { return ` ${title}

${title}

${body}

Любимый Креатив — магазин handmade изделий

` } export function renderOrderCreatedEmail({ orderId, totalCents, itemsCount, deliveryType }) { const total = (totalCents / 100).toLocaleString('ru-RU') const nextAction = deliveryType === 'delivery' ? 'Оплата будет доступна после уточнения стоимости доставки.' : 'Ожидает оплаты.' const body = `

Ваш заказ #${orderId.slice(0, 8)} успешно создан.

Товаров: ${itemsCount} | Сумма: ${total} ₽

${nextAction}

` return { subject: 'Заказ создан', html: baseLayout('Заказ создан', body) } } export function renderOrderStatusChangedEmail({ orderId, oldStatus, newStatus }) { const statusLabels = { DRAFT: 'Черновик', PENDING_PAYMENT: 'Ожидает оплаты', PAID: 'Оплачен', IN_PROGRESS: 'В работе', READY_FOR_PICKUP: 'Готов к выдаче', SHIPPED: 'Отправлен', DONE: 'Выполнен', CANCELLED: 'Отменён', } const oldLabel = statusLabels[oldStatus] || oldStatus const newLabel = statusLabels[newStatus] || newStatus const body = `

Статус заказа #${orderId.slice(0, 8)} изменён.

${oldLabel}${newLabel}

` return { subject: `Статус заказа изменён — ${newLabel}`, html: baseLayout('Статус заказа изменён', body), } } export function renderOrderMessageEmail({ orderId, preview }) { const truncated = preview.length > 200 ? preview.slice(0, 197) + '...' : preview const body = `

Новое сообщение к заказу #${orderId.slice(0, 8)}:

${truncated}

Ответьте в личном кабинете.

` return { subject: 'Новое сообщение к заказу', html: baseLayout('Новое сообщение', body), } } export function renderPaymentStatusChangedEmail({ orderId, paymentStatus }) { const statusLabels = { pending: 'Ожидает', confirmed: 'Подтверждён', rejected: 'Отклонён', } const label = statusLabels[paymentStatus] || paymentStatus const body = `

Статус оплаты заказа #${orderId.slice(0, 8)}: ${label}.

` return { subject: `Оплата заказа — ${label}`, html: baseLayout('Оплата заказа', body), } } export function renderAdminOrderCreatedEmail({ orderId, userEmail, totalCents, itemsCount, deliveryType }) { const total = (totalCents / 100).toLocaleString('ru-RU') const note = deliveryType === 'delivery' ? '

⚠️ Скорректируйте стоимость доставки в админ-панели.

' : '' const body = `

Новый заказ #${orderId.slice(0, 8)} от ${userEmail}.

Товаров: ${itemsCount} | Сумма: ${total} ₽

${note} ` return { subject: 'Новый заказ', html: baseLayout('Новый заказ', body) } } export function renderAdminNewReviewEmail({ rating, text, productTitle, userName }) { const stars = '★'.repeat(rating) + '☆'.repeat(5 - rating) const body = `

Новый отзыв ${stars} на товар ${productTitle} от ${userName}.

${text ? `
${text}
` : ''}

Проверьте отзыв в админ-панели.

` return { subject: 'Новый отзыв', html: baseLayout('Новый отзыв', body) } } export function renderAuthCodeEmail({ code }) { const body = `

Ваш код входа: ${code}

Если это были не вы — просто проигнорируйте письмо.

` return { subject: 'Код входа', html: baseLayout('Код входа', body) } } export function renderDeliveryFeeAdjustedEmail({ orderId, totalCents }) { const total = (totalCents / 100).toLocaleString('ru-RU') const body = `

Стоимость доставки заказа #${orderId.slice(0, 8)} скорректирована.

Новая сумма: ${total} ₽

Ожидает оплаты. Проверьте статус заказа в личном кабинете.

` return { subject: 'Стоимость доставки скорректирована', html: baseLayout('Стоимость доставки скорректирована', body), } }