'use server'; import { z } from 'zod'; import { Resend } from 'resend'; import { verifyRecaptcha } from '@/lib/recaptcha'; const resend = new Resend(process.env.RESEND_API_KEY); const orderSchema = z.object({ name: z.string().min(2), phone: z.string().min(9), email: z.string().email(), address: z.string().optional(), notes: z.string().optional(), consent: z.string(), products: z.string(), total: z.string(), }); export async function submitOrderForm(prevState: unknown, formData: FormData) { try { if (process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY && process.env.RECAPTCHA_SECRET_KEY) { const token = formData.get('recaptchaToken') as string; if (!token) { return { success: false, message: "Weryfikacja bezpieczeństwa nie powiodła się. Odśwież stronę i spróbuj ponownie." }; } const { success } = await verifyRecaptcha(token); if (!success) { return { success: false, message: "Weryfikacja bezpieczeństwa nie powiodła się. Odśwież stronę i spróbuj ponownie." }; } } const data = orderSchema.parse({ name: formData.get('name'), phone: formData.get('phone'), email: formData.get('email'), address: formData.get('address') || '', notes: formData.get('notes') || '', consent: formData.get('consent'), products: formData.get('products'), total: formData.get('total'), }); const products = JSON.parse(data.products); const total = parseFloat(data.total); const productRows = products.map((p: { name: string; quantity: number; price: number }) => `
Imię: ${data.name}
Telefon: ${data.phone}
Email: ${data.email}
${data.address ? `Adres: ${data.address}
` : ''} ${data.notes ? `Uwagi: ${data.notes}
` : ''}| Produkt | Ilość | Wartość |
|---|---|---|
| Łącznie (urządzenia) | ${total.toLocaleString('pl-PL')} zł | |
+ koszt montażu do ustalenia telefonicznie