/**
 * Typed high-level email send functions.
 *
 * Each function combines template render + Resend send into a single call.
 * Callers do not need to import React or @react-email/components directly.
 */

import React from 'react';
import { sendEmail } from './resend.js';
import type { ResendEnv, SendEmailResult } from './resend.js';
import type { Locale } from '@/lib/i18n/index.js';

// Template imports
import Receipt from './templates/Receipt.js';
import type { ReceiptProps } from './templates/Receipt.js';

import PurchaseDetailsQr from './templates/PurchaseDetailsQr.js';
import type { PurchaseDetailsQrProps } from './templates/PurchaseDetailsQr.js';

import VendorWelcome from './templates/VendorWelcome.js';
import type { VendorWelcomeProps } from './templates/VendorWelcome.js';

import DealApproved from './templates/DealApproved.js';
import type { DealApprovedProps } from './templates/DealApproved.js';

import DealRejected from './templates/DealRejected.js';
import type { DealRejectedProps } from './templates/DealRejected.js';

import SoldOut from './templates/SoldOut.js';
import type { SoldOutProps } from './templates/SoldOut.js';

import MonthlySettlement from './templates/MonthlySettlement.js';
import type { MonthlySettlementProps } from './templates/MonthlySettlement.js';

import PolicyViolation from './templates/PolicyViolation.js';
import type { PolicyViolationProps } from './templates/PolicyViolation.js';

import MagicLink from './templates/MagicLink.js';
import type { MagicLinkProps } from './templates/MagicLink.js';

import EmailVerify from './templates/EmailVerify.js';
import type { EmailVerifyProps } from './templates/EmailVerify.js';

import PaymentRefund from './templates/PaymentRefund.js';
import type { PaymentRefundProps } from './templates/PaymentRefund.js';

import ReviewRemovalDecision from './templates/ReviewRemovalDecision.js';
import type { ReviewRemovalDecisionProps } from './templates/ReviewRemovalDecision.js';

import ReturnOpened from './templates/returns/Opened.js';
import type { ReturnOpenedProps } from './templates/returns/Opened.js';

import ReturnApproved from './templates/returns/Approved.js';
import type { ReturnApprovedProps } from './templates/returns/Approved.js';

import ReturnTrackingEntered from './templates/returns/TrackingEntered.js';
import type { ReturnTrackingEnteredProps } from './templates/returns/TrackingEntered.js';

import ReturnReceived from './templates/returns/Received.js';
import type { ReturnReceivedProps } from './templates/returns/Received.js';

import ReturnRefunded from './templates/returns/Refunded.js';
import type { ReturnRefundedProps } from './templates/returns/Refunded.js';

import ReturnDenied from './templates/returns/Denied.js';
import type { ReturnDeniedProps } from './templates/returns/Denied.js';

import ReturnExpired from './templates/returns/Expired.js';
import type { ReturnExpiredProps } from './templates/returns/Expired.js';

// ─── Subject lines ────────────────────────────────────────────────────────────

const subjects: Record<Locale, Record<string, string | ((arg: string) => string)>> = {
  he: {
    receipt: (title: string) => `קבלה: ${title}`,
    purchaseDetails: (title: string) => `פרטי הרכישה וקוד QR: ${title}`,
    vendorWelcome: 'ברוך הבא ל-Multideal',
    dealApproved: (title: string) => `העסקה "${title}" אושרה`,
    dealRejected: (title: string) => `העסקה "${title}" נדחתה`,
    soldOut: (title: string) => `נגמר המלאי: ${title}`,
    monthlySettlement: (period: string) => `דוח חיובים: ${period}`,
    policyViolation: 'הודעה מ-Multideal על הפרת מדיניות',
    magicLink: 'קישור כניסה לחשבון Multideal',
    emailVerify: 'אימות כתובת אימייל',
    paymentRefund: 'אישור החזר כספי',
    reviewRemovalApproved: 'הביקורת הוסרה - ההחלטה אושרה',
    reviewRemovalRejected: 'בקשת הסרת הביקורת נדחתה',
    returnOpened: 'בקשת ההחזרה שלך התקבלה',
    returnApproved: 'בקשת ההחזרה אושרה — שלח את המוצר',
    returnTrackingEntered: 'הקונה הזין מספר מעקב למשלוח ההחזרה',
    returnReceived: 'המוכר קיבל את המוצר — בבדיקה',
    returnRefunded: 'ההחזר הכספי עבור ההחזרה שלך אושר',
    returnDenied: 'בקשת ההחזרה שלך נדחתה',
    returnExpired: 'בקשת ההחזרה שלך נסגרה',
  },
  en: {
    receipt: (title: string) => `Receipt: ${title}`,
    purchaseDetails: (title: string) => `Purchase details & QR code: ${title}`,
    vendorWelcome: 'Welcome to Multideal',
    dealApproved: (title: string) => `Your deal "${title}" is live`,
    dealRejected: (title: string) => `Your deal "${title}" was rejected`,
    soldOut: (title: string) => `Sold out: ${title}`,
    monthlySettlement: (period: string) => `Monthly settlement: ${period}`,
    policyViolation: 'Policy action from Multideal',
    magicLink: 'Your Multideal login link',
    emailVerify: 'Verify your email address',
    paymentRefund: 'Refund confirmation',
    reviewRemovalApproved: 'Review removed - removal request approved',
    reviewRemovalRejected: 'Review removal request rejected',
    returnOpened: 'Your return request has been received',
    returnApproved: 'Your return is approved — ship the item',
    returnTrackingEntered: 'Return tracking number entered',
    returnReceived: 'Your returned item has been received',
    returnRefunded: 'Your return refund has been issued',
    returnDenied: 'Your return request has been denied',
    returnExpired: 'Your return request was closed',
  },
};

function getSubject(locale: Locale, key: string, arg?: string): string {
  const localeSubjects = subjects[locale];
  const entry = localeSubjects[key];
  if (!entry) return key;
  if (typeof entry === 'function' && arg !== undefined) return entry(arg);
  if (typeof entry === 'string') return entry;
  return key;
}

// ─── Send functions ───────────────────────────────────────────────────────────

export async function sendReceipt(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<ReceiptProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'receipt', props.dealTitle),
    react: React.createElement(Receipt, { ...props, locale }),
    tags: [{ name: 'type', value: 'receipt' }],
  });
}

export async function sendPurchaseDetails(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<PurchaseDetailsQrProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'purchaseDetails', props.dealTitle),
    react: React.createElement(PurchaseDetailsQr, { ...props, locale }),
    tags: [{ name: 'type', value: 'purchase_details' }],
  });
}

export async function sendVendorWelcome(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<VendorWelcomeProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'vendorWelcome'),
    react: React.createElement(VendorWelcome, { ...props, locale }),
    tags: [{ name: 'type', value: 'vendor_welcome' }],
  });
}

export async function sendDealApproved(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<DealApprovedProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'dealApproved', props.dealTitle),
    react: React.createElement(DealApproved, { ...props, locale }),
    tags: [{ name: 'type', value: 'deal_approved' }],
  });
}

export async function sendDealRejected(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<DealRejectedProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'dealRejected', props.dealTitle),
    react: React.createElement(DealRejected, { ...props, locale }),
    tags: [{ name: 'type', value: 'deal_rejected' }],
  });
}

export async function sendSoldOut(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<SoldOutProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'soldOut', props.dealTitle),
    react: React.createElement(SoldOut, { ...props, locale }),
    tags: [{ name: 'type', value: 'sold_out' }],
  });
}

export async function sendMonthlySettlement(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<MonthlySettlementProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'monthlySettlement', props.periodLabel),
    react: React.createElement(MonthlySettlement, { ...props, locale }),
    tags: [{ name: 'type', value: 'monthly_settlement' }],
  });
}

export async function sendPolicyViolation(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<PolicyViolationProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'policyViolation'),
    react: React.createElement(PolicyViolation, { ...props, locale }),
    tags: [{ name: 'type', value: 'policy_violation' }],
  });
}

export async function sendMagicLink(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<MagicLinkProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'magicLink'),
    react: React.createElement(MagicLink, { ...props, locale }),
    tags: [{ name: 'type', value: 'magic_link' }],
  });
}

export async function sendEmailVerify(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<EmailVerifyProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'emailVerify'),
    react: React.createElement(EmailVerify, { ...props, locale }),
    tags: [{ name: 'type', value: 'email_verify' }],
  });
}

export async function sendPaymentRefund(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<PaymentRefundProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'paymentRefund'),
    react: React.createElement(PaymentRefund, { ...props, locale }),
    tags: [{ name: 'type', value: 'payment_refund' }],
  });
}

export async function sendReviewRemovalApproved(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<
    ReviewRemovalDecisionProps,
    'locale' | 'decision'
  >,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'reviewRemovalApproved'),
    react: React.createElement(ReviewRemovalDecision, { ...props, decision: 'APPROVED', locale }),
    tags: [{ name: 'type', value: 'review_removal_approved' }],
  });
}

export async function sendReviewRemovalRejected(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<
    ReviewRemovalDecisionProps,
    'locale' | 'decision'
  >,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'reviewRemovalRejected'),
    react: React.createElement(ReviewRemovalDecision, { ...props, decision: 'REJECTED', locale }),
    tags: [{ name: 'type', value: 'review_removal_rejected' }],
  });
}

// ─── Returns / RMA email send functions ──────────────────────────────────────

export async function sendReturnOpened(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<ReturnOpenedProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'returnOpened'),
    react: React.createElement(ReturnOpened, { ...props, locale }),
    tags: [{ name: 'type', value: 'return_opened' }],
  });
}

export async function sendReturnApproved(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<ReturnApprovedProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'returnApproved'),
    react: React.createElement(ReturnApproved, { ...props, locale }),
    tags: [{ name: 'type', value: 'return_approved' }],
  });
}

export async function sendReturnTrackingEntered(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<ReturnTrackingEnteredProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'returnTrackingEntered'),
    react: React.createElement(ReturnTrackingEntered, { ...props, locale }),
    tags: [{ name: 'type', value: 'return_tracking_entered' }],
  });
}

export async function sendReturnReceived(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<ReturnReceivedProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'returnReceived'),
    react: React.createElement(ReturnReceived, { ...props, locale }),
    tags: [{ name: 'type', value: 'return_received' }],
  });
}

export async function sendReturnRefunded(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<ReturnRefundedProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'returnRefunded'),
    react: React.createElement(ReturnRefunded, { ...props, locale }),
    tags: [{ name: 'type', value: 'return_refunded' }],
  });
}

export async function sendReturnDenied(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<ReturnDeniedProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'returnDenied'),
    react: React.createElement(ReturnDenied, { ...props, locale }),
    tags: [{ name: 'type', value: 'return_denied' }],
  });
}

export async function sendReturnExpired(
  env: ResendEnv,
  payload: { to: string; locale?: Locale } & Omit<ReturnExpiredProps, 'locale'>,
): Promise<SendEmailResult> {
  const { to, locale = 'he', ...props } = payload;
  return sendEmail(env, {
    to,
    subject: getSubject(locale, 'returnExpired'),
    react: React.createElement(ReturnExpired, { ...props, locale }),
    tags: [{ name: 'type', value: 'return_expired' }],
  });
}

// ─── Marketing template imports ───────────────────────────────────────────────

import BuyerWelcome from './templates/marketing/BuyerWelcome.js';
import BuyerWelcomeDay3 from './templates/marketing/BuyerWelcomeDay3.js';
import BuyerWeeklyDigest from './templates/marketing/BuyerWeeklyDigest.js';
import VoucherExpiry from './templates/marketing/VoucherExpiry.js';
import ReEngagement from './templates/marketing/ReEngagement.js';
import type { ReEngagementTone } from './templates/marketing/ReEngagement.js';
import ReviewRequest from './templates/marketing/ReviewRequest.js';
import VendorWelcomeMarketing from './templates/marketing/VendorWelcome.js';
import VendorDealExpiry from './templates/marketing/VendorDealExpiry.js';
import VendorLowRedemption from './templates/marketing/VendorLowRedemption.js';

// ─── Marketing email env ──────────────────────────────────────────────────────

export interface MarketingEnv {
  RESEND_API_KEY: string;
  RESEND_MARKETING_FROM_EMAIL: string;
  ENVIRONMENT?: string;
  EMAIL_MOCK_DB?: D1Database;
}

function mEnv(env: MarketingEnv): ResendEnv {
  return {
    RESEND_API_KEY: env.RESEND_API_KEY,
    RESEND_FROM_EMAIL: env.RESEND_MARKETING_FROM_EMAIL,
    ENVIRONMENT: env.ENVIRONMENT,
    EMAIL_MOCK_DB: env.EMAIL_MOCK_DB,
  };
}

// ─── Shared deal summary type ─────────────────────────────────────────────────

type DealSummary = { title: string; slug: string; priceAgorot: number; originalPriceAgorot: number };

// ─── Buyer lifecycle sends ────────────────────────────────────────────────────

export async function sendBuyerWelcome(
  env: MarketingEnv,
  opts: { to: string; buyerName?: string; siteUrl: string; unsubscribeUrl: string; locale?: Locale },
): Promise<SendEmailResult> {
  const subj = opts.locale === 'en' ? 'Welcome to Multideal!' : 'ברוך הבא למולטידיל!';
  return sendEmail(mEnv(env), {
    to: opts.to,
    subject: subj,
    react: React.createElement(BuyerWelcome, {
      buyerName: opts.buyerName,
      siteUrl: opts.siteUrl,
      unsubscribeUrl: opts.unsubscribeUrl,
      locale: opts.locale,
    }),
    tags: [{ name: 'trigger', value: 'buyer.welcome.day0' }],
  });
}

export async function sendBuyerWelcomeDay3(
  env: MarketingEnv,
  opts: { to: string; buyerName?: string; deals: DealSummary[]; siteUrl: string; unsubscribeUrl: string; locale?: Locale },
): Promise<SendEmailResult> {
  const subj = opts.locale === 'en' ? "This week's deals near you" : 'הדילים הכי טובים השבוע באזורך';
  return sendEmail(mEnv(env), {
    to: opts.to,
    subject: subj,
    react: React.createElement(BuyerWelcomeDay3, {
      buyerName: opts.buyerName,
      deals: opts.deals,
      siteUrl: opts.siteUrl,
      unsubscribeUrl: opts.unsubscribeUrl,
      locale: opts.locale,
    }),
    tags: [{ name: 'trigger', value: 'buyer.welcome.day3' }],
  });
}

export async function sendBuyerWeeklyDigest(
  env: MarketingEnv,
  opts: { to: string; buyerName?: string; deals: DealSummary[]; weekStr: string; siteUrl: string; unsubscribeUrl: string; locale?: Locale },
): Promise<SendEmailResult> {
  const subj = opts.locale === 'en' ? "This week's top deals" : 'הדילים הכי טובים השבוע';
  return sendEmail(mEnv(env), {
    to: opts.to,
    subject: subj,
    react: React.createElement(BuyerWeeklyDigest, {
      buyerName: opts.buyerName,
      deals: opts.deals,
      weekStr: opts.weekStr,
      siteUrl: opts.siteUrl,
      unsubscribeUrl: opts.unsubscribeUrl,
      locale: opts.locale,
    }),
    tags: [{ name: 'trigger', value: 'buyer.digest.weekly' }],
  });
}

export async function sendVoucherExpiry(
  env: MarketingEnv,
  opts: { to: string; buyerName?: string; dealTitle: string; expiryDateStr: string; redeemUrl: string; siteUrl: string; unsubscribeUrl: string; locale?: Locale },
): Promise<SendEmailResult> {
  const subj = opts.locale === 'en' ? 'Your deal expires in 3 days' : "הוואוצ'ר שלך פג עוד 3 ימים";
  return sendEmail(mEnv(env), {
    to: opts.to,
    subject: subj,
    react: React.createElement(VoucherExpiry, {
      buyerName: opts.buyerName,
      dealTitle: opts.dealTitle,
      expiryDateStr: opts.expiryDateStr,
      redeemUrl: opts.redeemUrl,
      siteUrl: opts.siteUrl,
      unsubscribeUrl: opts.unsubscribeUrl,
      locale: opts.locale,
    }),
    tags: [{ name: 'trigger', value: 'buyer.voucher.expiry3d' }],
  });
}

export async function sendReEngagement(
  env: MarketingEnv,
  opts: { to: string; buyerName?: string; deals: DealSummary[]; tone: ReEngagementTone; siteUrl: string; unsubscribeUrl: string; locale?: Locale },
): Promise<SendEmailResult> {
  const subjMap: Record<ReEngagementTone, { he: string; en: string }> = {
    '30d': { he: 'התגעגענו — יש דילים חדשים', en: "We've missed you — new deals this week" },
    '60d': { he: 'דילים בלעדיים רק בשבילך', en: 'Exclusive deals waiting for you' },
    '90d': { he: 'ההצעה האחרונה שלנו', en: 'Our final offer to bring you back' },
  };
  const subj = opts.locale === 'en' ? subjMap[opts.tone].en : subjMap[opts.tone].he;
  return sendEmail(mEnv(env), {
    to: opts.to,
    subject: subj,
    react: React.createElement(ReEngagement, {
      buyerName: opts.buyerName,
      deals: opts.deals,
      tone: opts.tone,
      siteUrl: opts.siteUrl,
      unsubscribeUrl: opts.unsubscribeUrl,
      locale: opts.locale,
    }),
    tags: [{ name: 'trigger', value: `buyer.reengagement.${opts.tone}` }],
  });
}

export async function sendReviewRequest(
  env: MarketingEnv,
  opts: { to: string; buyerName?: string; dealTitle: string; reviewUrl: string; siteUrl: string; unsubscribeUrl: string; locale?: Locale },
): Promise<SendEmailResult> {
  const subj = opts.locale === 'en' ? 'How was your experience?' : 'איך היה הדיל?';
  return sendEmail(mEnv(env), {
    to: opts.to,
    subject: subj,
    react: React.createElement(ReviewRequest, {
      buyerName: opts.buyerName,
      dealTitle: opts.dealTitle,
      reviewUrl: opts.reviewUrl,
      siteUrl: opts.siteUrl,
      unsubscribeUrl: opts.unsubscribeUrl,
      locale: opts.locale,
    }),
    tags: [{ name: 'trigger', value: 'buyer.postpurchase.day7' }],
  });
}

// ─── Vendor lifecycle marketing sends ────────────────────────────────────────

export async function sendVendorWelcomeMarketing(
  env: MarketingEnv,
  opts: { to: string; vendorName?: string; dashboardUrl: string; unsubscribeUrl: string; locale?: Locale },
): Promise<SendEmailResult> {
  const subj = opts.locale === 'en' ? "Welcome to Multideal — let's launch your first deal!" : 'ברוכ.ה הבא.ה כעסק שותף במולטידיל!';
  return sendEmail(mEnv(env), {
    to: opts.to,
    subject: subj,
    react: React.createElement(VendorWelcomeMarketing, {
      vendorName: opts.vendorName,
      dashboardUrl: opts.dashboardUrl,
      unsubscribeUrl: opts.unsubscribeUrl,
      locale: opts.locale,
    }),
    tags: [{ name: 'trigger', value: 'vendor.welcome.day0' }],
  });
}

export async function sendVendorDealExpiry(
  env: MarketingEnv,
  opts: { to: string; vendorName?: string; dealTitle: string; expiryDateStr: string; dashboardUrl: string; unsubscribeUrl: string; locale?: Locale },
): Promise<SendEmailResult> {
  const subj = opts.locale === 'en' ? `Deal expiring soon: ${opts.dealTitle}` : `הדיל שלך עומד לפוג: ${opts.dealTitle}`;
  return sendEmail(mEnv(env), {
    to: opts.to,
    subject: subj,
    react: React.createElement(VendorDealExpiry, {
      vendorName: opts.vendorName,
      dealTitle: opts.dealTitle,
      expiryDateStr: opts.expiryDateStr,
      dashboardUrl: opts.dashboardUrl,
      unsubscribeUrl: opts.unsubscribeUrl,
      locale: opts.locale,
    }),
    tags: [{ name: 'trigger', value: 'vendor.deal.expiry3d' }],
  });
}

export async function sendVendorLowRedemption(
  env: MarketingEnv,
  opts: { to: string; vendorName?: string; dealTitle: string; redemptionCount: number; tipUrl: string; unsubscribeUrl: string; locale?: Locale },
): Promise<SendEmailResult> {
  const subj = opts.locale === 'en' ? `Your deal "${opts.dealTitle}" needs a boost` : `הדיל "${opts.dealTitle}" יכול להשתפר`;
  return sendEmail(mEnv(env), {
    to: opts.to,
    subject: subj,
    react: React.createElement(VendorLowRedemption, {
      vendorName: opts.vendorName,
      dealTitle: opts.dealTitle,
      redemptionCount: opts.redemptionCount,
      tipUrl: opts.tipUrl,
      unsubscribeUrl: opts.unsubscribeUrl,
      locale: opts.locale,
    }),
    tags: [{ name: 'trigger', value: 'vendor.deal.low_redemption' }],
  });
}
