'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: any, 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: any) => `${p.name}${p.quantity}${(p.price * p.quantity).toLocaleString('pl-PL')} zł` ).join(''); await resend.emails.send({ from: process.env.RESEND_FROM_EMAIL || 'noreply@thermcool.pl', to: process.env.RESEND_TO_EMAIL || 'biuro@thermcool.pl', replyTo: data.email, subject: `Nowe zamówienie od ${data.name} — ${total.toLocaleString('pl-PL')} zł`, html: `

Nowe zamówienie — ThermCool

Dane klienta

Imię: ${data.name}

Telefon: ${data.phone}

Email: ${data.email}

${data.address ? `

Adres: ${data.address}

` : ''} ${data.notes ? `

Uwagi: ${data.notes}

` : ''}

Zamówione produkty

${productRows}
Produkt Ilość Wartość
Łącznie (urządzenia) ${total.toLocaleString('pl-PL')} zł

+ koszt montażu do ustalenia telefonicznie

`, }); return { success: true, message: 'Dziękujemy! Skontaktujemy się z Tobą w ciągu 24 godzin, aby potwierdzić zamówienie i ustalić termin montażu.' }; } catch (e) { return { success: false, message: 'Wystąpił błąd. Spróbuj ponownie lub zadzwoń do nas bezpośrednio.' }; } }