import { z } from "npm:zod@3.23.8"; const corsHeaders = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "authorization, x-client-info, apikey, content-type", "Access-Control-Allow-Methods": "POST, OPTIONS", }; const GATEWAY_URL = "https://connector-gateway.lovable.dev/brevo"; const BodySchema = z.object({ order_number: z.string().min(1).max(100), customer_email: z.string().email(), customer_name: z.string().min(1).max(200), kg_per_week: z.number().min(0), employees: z.number().int().min(0), monthly_amount_sek: z.number().min(0), method: z.enum(["card", "invoice"]), address: z.string().max(200).optional().default(""), postal_code: z.string().max(20).optional().default(""), phone: z.string().max(30).optional().default(""), comments: z.string().max(1000).optional().default(""), }); function fmtKr(n: number) { return new Intl.NumberFormat("sv-SE", { style: "currency", currency: "SEK", maximumFractionDigits: 0, }).format(n); } Deno.serve(async (req) => { if (req.method === "OPTIONS") return new Response("ok", { headers: corsHeaders }); try { const LOVABLE_API_KEY = Deno.env.get("LOVABLE_API_KEY"); const BREVO_API_KEY = Deno.env.get("BREVO_API_KEY"); if (!LOVABLE_API_KEY || !BREVO_API_KEY) { throw new Error("Email service not configured"); } const raw = await req.json(); const parsed = BodySchema.safeParse(raw); if (!parsed.success) { return new Response( JSON.stringify({ error: "Ogiltiga fält", details: parsed.error.flatten().fieldErrors }), { status: 400, headers: { ...corsHeaders, "Content-Type": "application/json" } }, ); } const o = parsed.data; const senderEmail = Deno.env.get("BREVO_SENDER_EMAIL") ?? "noreply@konditorivaror.se"; const senderName = Deno.env.get("BREVO_SENDER_NAME") ?? "Lennart Svensson Konditorivaror"; const adminEmail = Deno.env.get("ORDER_NOTIFICATION_EMAIL") ?? senderEmail; const methodLabel = o.method === "card" ? "Kort (månadsvis)" : "Faktura (månadsvis)"; const customerHtml = `
Hej ${o.customer_name},
Vi har mottagit din beställning av Kakabonnemang. Goda saker är på väg – leverans varje tisdag inom Storstockholm.
| Ordernummer: | ${o.order_number} |
| Mängd: | ${o.kg_per_week} kg/vecka |
| Antal anställda: | ${o.employees} |
| Månadskostnad (exkl. moms): | ${fmtKr(o.monthly_amount_sek)} |
| Betalning: | ${methodLabel} |
Har du frågor? Svara bara på detta mejl.
Äkta svenskt konditorhantverk
Företag: ${o.customer_name}
E-post: ${o.customer_email}
Telefon: ${o.phone || "-"}
Mängd: ${o.kg_per_week} kg/vecka
Anställda: ${o.employees}
Månadskostnad (exkl moms): ${fmtKr(o.monthly_amount_sek)}
Betalning: ${methodLabel}
Leverans: ${o.address || "-"}, ${o.postal_code || "-"}
${o.comments ? `Kommentar: ${o.comments}
` : ""}